在本章中,我們將討論P(yáng)L/SQL中的日期和時(shí)間。 PL/SQL中有兩種與日期和時(shí)間相關(guān)的數(shù)據(jù)類型 -
日期時(shí)間(Datetime)數(shù)據(jù)類型是 -
間隔數(shù)據(jù)類型是 -
日期時(shí)間和時(shí)間間隔數(shù)據(jù)類型都由字段組成。這些字段的值決定了數(shù)據(jù)類型的值。下表列出了日期時(shí)間和間隔的字段及其可能的值。
字段名稱 | 有效的日期時(shí)間值 | 有效的區(qū)間值 |
---|---|---|
YEAR |
-4712 至9999 (不包括0 年) |
任何四位非零整數(shù) |
MONTH |
01 至 12 |
0 至 11 |
DAY |
01 至31 (受MONTH 和YEAR 的值限制,根據(jù)地區(qū)的日歷規(guī)則) |
任何非零整數(shù) |
HOUR |
00 至 23 |
0 至 23 |
MINUTE |
00 至 59 |
0 至 59 |
SECOND |
00 至59.9(n) ,其中9(n) 是時(shí)間小數(shù)秒的精確度,9(n) 部分不適用于DATE 。 |
0 至59.9(n) ,其中9(n) 是間隔小數(shù)秒的精確度 |
TIMEZONE_HOUR |
-12 至14 (范圍適應(yīng)夏時(shí)制的變化),不適用于DATE 或TIMESTAMP 。 |
不適用 |
TIMEZONE_MINUTE |
00 至59 ,不適用于DATE 或TIMESTAMP 。 |
不適用 |
TIMEZONE_REGION |
不適用于DATE 或TIMESTAMP 。 |
不適用 |
TIMEZONE_ABBR |
不適用于DATE 或TIMESTAMP 。 |
不適用 |
以下是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); |
返回x 和y 之間的月數(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 x 和time_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ù)類型 -
區(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 。 |
更多建議: