PL/SQL 日期及時(shí)間

2021-08-30 15:54 更新

在本章中,我們將討論P(yáng)L/SQL中的日期和時(shí)間。 PL/SQL中有兩種與日期和時(shí)間相關(guān)的數(shù)據(jù)類型 -

  • 日期時(shí)間數(shù)據(jù)類型
  • 間隔數(shù)據(jù)類型

日期時(shí)間(Datetime)數(shù)據(jù)類型是 -

  • DATE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
  • TIMESTAMP WITH LOCAL TIME ZONE

間隔數(shù)據(jù)類型是 -

  • INTERVAL YEAR TO MONTH
  • INTERVAL DAY TO SECOND

日期時(shí)間和間隔數(shù)據(jù)類型的字段值

日期時(shí)間和時(shí)間間隔數(shù)據(jù)類型都由字段組成。這些字段的值決定了數(shù)據(jù)類型的值。下表列出了日期時(shí)間和間隔的字段及其可能的值。

字段名稱 有效的日期時(shí)間值 有效的區(qū)間值
YEAR -47129999(不包括0年) 任何四位非零整數(shù)
MONTH 0112 011
DAY 0131(受MONTHYEAR的值限制,根據(jù)地區(qū)的日歷規(guī)則) 任何非零整數(shù)
HOUR 0023 023
MINUTE 0059 059
SECOND 0059.9(n),其中9(n)是時(shí)間小數(shù)秒的精確度,9(n)部分不適用于DATE 059.9(n),其中9(n)是間隔小數(shù)秒的精確度
TIMEZONE_HOUR -1214(范圍適應(yīng)夏時(shí)制的變化),不適用于DATETIMESTAMP。 不適用
TIMEZONE_MINUTE 0059,不適用于DATETIMESTAMP。 不適用
TIMEZONE_REGION 不適用于DATETIMESTAMP。 不適用
TIMEZONE_ABBR 不適用于DATETIMESTAMP 不適用

日期時(shí)間數(shù)據(jù)類型和函數(shù)

以下是Datetime數(shù)據(jù)類型 -

DATE

它以字符和數(shù)字?jǐn)?shù)據(jù)類型存儲(chǔ)日期和時(shí)間信息。它由世紀(jì),年,月,日,時(shí),分,秒等信息組成。它被指定為 -

TIMESTAMP

它是DATE數(shù)據(jù)類型的擴(kuò)展。它存儲(chǔ)DATE數(shù)據(jù)類型的年份,月份和日期以及小時(shí),分鐘和秒值。這對(duì)于存儲(chǔ)精確的時(shí)間值非常有用。

TIMESTAMP WITH TIME ZONE

它是TIMESTAMP的一個(gè)變體,其中包含時(shí)區(qū)名稱或時(shí)區(qū)偏移量。時(shí)區(qū)偏移量是本地時(shí)間與UTC之間的時(shí)差(小時(shí)和分鐘)。此數(shù)據(jù)類型對(duì)于收集和評(píng)估跨地理區(qū)域的日期信息非常有用。

TIMESTAMP WITH LOCAL TIME ZONE

它是TIMESTAMP的另一個(gè)變體,它的值包括一個(gè)時(shí)區(qū)偏移量。下表提供了日期時(shí)間函數(shù)(其中,x具有日期時(shí)間值) -

編號(hào) 函數(shù)名稱 描述
1 ADD_MONTHS(x, y); y個(gè)月添加到x。
2 LAST_DAY(x); 返回月份的最后一天。
3 MONTHS_BETWEEN(x, y); 返回xy之間的月數(shù)。
4 NEXT_DAY(x, day); 返回x之后的第二天的日期時(shí)間。
5 NEW_TIME; 返回用戶指定的時(shí)區(qū)的時(shí)間/日期值。
6 ROUND(x [, unit]); 舍入x
7 SYSDATE(); 返回當(dāng)前的日期時(shí)間。
8 TRUNC(x [, unit]); 截?cái)?code>x。

時(shí)間戳函數(shù)(其中,x有時(shí)間戳值) -

編號(hào) 函數(shù)名稱 描述
1 CURRENT_TIMESTAMP(); 返回包含當(dāng)前會(huì)話時(shí)間以及會(huì)話時(shí)區(qū)的TIMESTAMP WITH TIME ZONE
2 EXTRACT({ YEAR / MONTH / DAY / HOUR / MINUTE / SECOND } / { TIMEZONE_HOUR / TIMEZONE_MINUTE } / { TIMEZONE_REGION } TIMEZONE_ABBR ) FROM x) x中提取并返回年,月,日,小時(shí),分鐘,秒或時(shí)區(qū)。
3 FROM_TZ(x, time_zone); TIMESTAMP xtime_zone指定的時(shí)區(qū)轉(zhuǎn)換為TIMESTAMP WITH TIMEZONE。
4 LOCALTIMESTAMP(); 返回包含會(huì)話時(shí)區(qū)中本地時(shí)間的TIMESTAMP。
5 SYSTIMESTAMP(); 返回包含當(dāng)前數(shù)據(jù)庫(kù)時(shí)間的TIMESTAMP WITH TIME ZONE以及數(shù)據(jù)庫(kù)時(shí)區(qū)。
6 SYS_EXTRACT_UTC(x); TIMESTAMP WITH TIMEZONE x轉(zhuǎn)換為包含UTC中的日期和時(shí)間的TIMESTAMP。
7 TO_TIMESTAMP(x, [format]); 將字符串x轉(zhuǎn)換為TIMESTAMP。
8 TO_TIMESTAMP_TZ(x, [format]); 將字符串x轉(zhuǎn)換為TIMESTAMP WITH TIMEZONE

例子

以下代碼片段說(shuō)明了上述函數(shù)的使用 -

示例1

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
--------------
07-11月-17
SQL

示例2

SQL> SELECT TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;

TO_CHAR(CURRENT_DAT
-------------------
2017-11-07 05:26:07
SQL

示例3

SQL> SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;

ADD_MONTHS(SYS
--------------
07-4月 -18
SQL

示例4

SQL> SELECT LOCALTIMESTAMP FROM DUAL;

LOCALTIMESTAMP
---------------------------------------------------------------------------
07-11月-17 05.27.13.752000 上午
SQL

區(qū)間數(shù)據(jù)類型和函數(shù)

以下是區(qū)間數(shù)據(jù)類型 -

  • INTERVAL YEAR TO MONTH - 它使用YEAR和MONTH日期時(shí)間字段存儲(chǔ)一段時(shí)間。第二天至第二天 - 它以天,小時(shí),分鐘和秒存儲(chǔ)一段時(shí)間。
  • INTERVAL DAY TO SECOND - 它以天,小時(shí),分鐘和秒的形式存儲(chǔ)一段時(shí)間。

區(qū)間函數(shù)

編號(hào) 函數(shù) 描述
1 NUMTODSINTERVAL(x, interval_unit); 將數(shù)字x轉(zhuǎn)換為INTERVAL DAY TO SECOND。
2 NUMTOYMINTERVAL(x, interval_unit); 將數(shù)字x轉(zhuǎn)換為INTERVAL YEAR TO MONTH。
3 TO_DSINTERVAL(x); 將字符串x轉(zhuǎn)換為INTERVAL DAY TO SECOND
4 TO_YMINTERVAL(x); 將字符串x轉(zhuǎn)換為INTERVAL YEAR TO MONTH。

 



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)