在本章中,我們將討論PL/SQL中的日期和時間。 PL/SQL中有兩種與日期和時間相關的資料型別 -
日期時間(Datetime)資料型別是 -
DATE
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
間隔資料型別是 -
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
日期時間和時間間隔資料型別都由欄位組成。這些欄位的值決定了資料型別的值。下表列出了日期時間和間隔的欄位及其可能的值。
欄位名稱 | 有效的日期時間值 | 有效的區間值 |
---|---|---|
YEAR |
-4712 至9999 (不包括0 年) |
任何四位非零整數 |
MONTH |
01 至 12 |
0 至 11 |
DAY |
01 至31 (受MONTH 和YEAR 的值限制,根據地區的日曆規則) |
任何非零整數 |
HOUR |
00 至 23 |
0 至 23 |
MINUTE |
00 至 59 |
0 至 59 |
SECOND |
00 至59.9(n) ,其中9(n) 是時間小數秒的精確度,9(n) 部分不適用於DATE 。 |
0 至59.9(n) ,其中9(n) 是間隔小數秒的精確度 |
TIMEZONE_HOUR |
-12 至14 (範圍適應夏時制的變化),不適用於DATE 或TIMESTAMP 。 |
不適用 |
TIMEZONE_MINUTE |
00 至59 ,不適用於DATE 或TIMESTAMP 。 |
不適用 |
TIMEZONE_REGION |
不適用於DATE 或TIMESTAMP 。 |
不適用 |
TIMEZONE_ABBR |
不適用於DATE 或TIMESTAMP 。 |
不適用 |
以下是Datetime
資料型別 -
DATE
它以字元和數位資料型別儲存日期和時間資訊。它由世紀,年,月,日,時,分,秒等資訊組成。它被指定為 -
TIMESTAMP
它是DATE
資料型別的擴充套件。它儲存DATE
資料型別的年份,月份和日期以及小時,分鐘和秒值。這對於儲存精確的時間值非常有用。
TIMESTAMP WITH TIME ZONE
它是TIMESTAMP
的一個變體,其中包含時區名稱或時區偏移量。時區偏移量是本地時間與UTC之間的時差(小時和分鐘)。此資料型別對於收集和評估跨地理區域的日期資訊非常有用。
TIMESTAMP WITH LOCAL TIME ZONE
它是TIMESTAMP
的另一個變體,它的值包括一個時區偏移量。下表提供了日期時間函式(其中,x
具有日期時間值) -
編號 | 函式名稱 | 描述 |
---|---|---|
1 | ADD_MONTHS(x, y); |
將y 個月新增到x 。 |
2 | LAST_DAY(x); |
返回月份的最後一天。 |
3 | MONTHS_BETWEEN(x, y); |
返回x 和y 之間的月數。 |
4 | NEXT_DAY(x, day); |
返回x 之後的第二天的日期時間。 |
5 | NEW_TIME; |
返回使用者指定的時區的時間/日期值。 |
6 | ROUND(x [, unit]); |
捨入x |
7 | SYSDATE(); |
返回當前的日期時間。 |
8 | TRUNC(x [, unit]); |
截斷x 。 |
時間戳函式(其中,x
有時間戳值) -
編號 | 函式名稱 | 描述 |
---|---|---|
1 | CURRENT_TIMESTAMP(); |
返回包含當前對談時間以及對談時區的TIMESTAMP WITH TIME ZONE 。 |
2 | EXTRACT({ YEAR / MONTH / DAY / HOUR / MINUTE / SECOND } / { TIMEZONE_HOUR / TIMEZONE_MINUTE } / { TIMEZONE_REGION } TIMEZONE_ABBR ) FROM x) |
從x 中提取並返回年,月,日,小時,分鐘,秒或時區。 |
3 | FROM_TZ(x, time_zone); |
將TIMESTAMP x 和time_zone 指定的時區轉換為TIMESTAMP WITH TIMEZONE 。 |
4 | LOCALTIMESTAMP(); |
返回包含對談時區中本地時間的TIMESTAMP 。 |
5 | SYSTIMESTAMP(); |
返回包含當前資料庫時間的TIMESTAMP WITH TIME ZONE 以及資料庫時區。 |
6 | SYS_EXTRACT_UTC(x); |
將TIMESTAMP WITH TIMEZONE x 轉換為包含UTC中的日期和時間的TIMESTAMP 。 |
7 | TO_TIMESTAMP(x, [format]); |
將字串x 轉換為TIMESTAMP 。 |
8 | TO_TIMESTAMP_TZ(x, [format]); |
將字串x 轉換為TIMESTAMP WITH TIMEZONE 。 |
以下程式碼片段說明了上述函式的使用 -
範例1
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
--------------
07-11月-17
範例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
範例3
SQL> SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;
ADD_MONTHS(SYS
--------------
07-4月 -18
範例4
SQL> SELECT LOCALTIMESTAMP FROM DUAL;
LOCALTIMESTAMP
---------------------------------------------------------------------------
07-11月-17 05.27.13.752000 上午
以下是區間資料型別 -
INTERVAL YEAR TO MONTH
- 它使用YEAR
和MONTH
日期時間欄位儲存一段時間。第二天至第二天 - 它以天,小時,分鐘和秒儲存一段時間。INTERVAL DAY TO SECOND
- 它以天,小時,分鐘和秒的形式儲存一段時間。區間函式
編號 | 函式 | 描述 |
---|---|---|
1 | NUMTODSINTERVAL(x, interval_unit); |
將數位x 轉換為INTERVAL DAY TO SECOND 。 |
2 | NUMTOYMINTERVAL(x, interval_unit); |
將數位x 轉換為INTERVAL YEAR TO MONTH 。 |
3 | TO_DSINTERVAL(x); |
將字串x 轉換為INTERVAL DAY TO SECOND 。 |
4 | TO_YMINTERVAL(x); |
將字串x 轉換為INTERVAL YEAR TO MONTH 。 |