在本章中,我們將討論P(yáng)L/SQL中的日期和時間。 PL/SQL中有兩種與日期和時間相關(guān)的數(shù)據(jù)類型 -
日期時間(Datetime)數(shù)據(jù)類型是 -
間隔數(shù)據(jù)類型是 -
日期時間和時間間隔數(shù)據(jù)類型都由字段組成。這些字段的值決定了數(shù)據(jù)類型的值。下表列出了日期時間和間隔的字段及其可能的值。
字段名稱 | 有效的日期時間值 | 有效的區(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ù)秒的精確度,9(n) 部分不適用于DATE 。 |
0 至59.9(n) ,其中9(n) 是間隔小數(shù)秒的精確度 |
TIMEZONE_HOUR |
-12 至14 (范圍適應(yīng)夏時制的變化),不適用于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ù)類型存儲日期和時間信息。它由世紀(jì),年,月,日,時,分,秒等信息組成。它被指定為 -
TIMESTAMP
它是DATE數(shù)據(jù)類型的擴(kuò)展。它存儲DATE數(shù)據(jù)類型的年份,月份和日期以及小時,分鐘和秒值。這對于存儲精確的時間值非常有用。
TIMESTAMP WITH TIME ZONE
它是TIMESTAMP的一個變體,其中包含時區(qū)名稱或時區(qū)偏移量。時區(qū)偏移量是本地時間與UTC之間的時差(小時和分鐘)。此數(shù)據(jù)類型對于收集和評估跨地理區(qū)域的日期信息非常有用。
TIMESTAMP WITH LOCAL TIME ZONE
它是TIMESTAMP的另一個變體,它的值包括一個時區(qū)偏移量。下表提供了日期時間函數(shù)(其中,x具有日期時間值) -
編號 | 函數(shù)名稱 | 描述 |
---|---|---|
1 | ADD_MONTHS(x, y); |
將y 個月添加到x 。 |
2 | LAST_DAY(x); |
返回月份的最后一天。 |
3 | MONTHS_BETWEEN(x, y); |
返回x 和y 之間的月數(shù)。 |
4 | NEXT_DAY(x, day); |
返回x 之后的第二天的日期時間。 |
5 | NEW_TIME; |
返回用戶指定的時區(qū)的時間/日期值。 |
6 | ROUND(x [, unit]); |
舍入x |
7 | SYSDATE(); |
返回當(dāng)前的日期時間。 |
8 | TRUNC(x [, unit]); |
截斷x 。 |
時間戳函數(shù)(其中,x有時間戳值) -
編號 | 函數(shù)名稱 | 描述 |
---|---|---|
1 | CURRENT_TIMESTAMP(); |
返回包含當(dāng)前會話時間以及會話時區(qū)的TIMESTAMP WITH TIME ZONE 。 |
2 | EXTRACT({ YEAR / MONTH / DAY / HOUR / MINUTE / SECOND } / { TIMEZONE_HOUR / TIMEZONE_MINUTE } / { TIMEZONE_REGION } TIMEZONE_ABBR ) FROM x) |
從x 中提取并返回年,月,日,小時,分鐘,秒或時區(qū)。 |
3 | FROM_TZ(x, time_zone); |
將TIMESTAMP x 和time_zone 指定的時區(qū)轉(zhuǎn)換為TIMESTAMP WITH TIMEZONE 。 |
4 | LOCALTIMESTAMP(); |
返回包含會話時區(qū)中本地時間的TIMESTAMP 。 |
5 | SYSTIMESTAMP(); |
返回包含當(dāng)前數(shù)據(jù)庫時間的TIMESTAMP WITH TIME ZONE 以及數(shù)據(jù)庫時區(qū)。 |
6 | SYS_EXTRACT_UTC(x); |
將TIMESTAMP WITH TIMEZONE x 轉(zhuǎn)換為包含UTC中的日期和時間的TIMESTAMP 。 |
7 | TO_TIMESTAMP(x, [format]); |
將字符串x 轉(zhuǎn)換為TIMESTAMP 。 |
8 | TO_TIMESTAMP_TZ(x, [format]); |
將字符串x 轉(zhuǎn)換為TIMESTAMP WITH TIMEZONE 。 |
以下代碼片段說明了上述函數(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ù)
編號 | 函數(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 。 |
更多建議: