PL/SQL日期及時間


在本章中,我們將討論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 -47129999(不包括0年) 任何四位非零整數
MONTH 0112 011
DAY 0131(受MONTHYEAR的值限制,根據地區的日曆規則) 任何非零整數
HOUR 0023 023
MINUTE 0059 059
SECOND 0059.9(n),其中9(n)是時間小數秒的精確度,9(n)部分不適用於DATE 059.9(n),其中9(n)是間隔小數秒的精確度
TIMEZONE_HOUR -1214(範圍適應夏時制的變化),不適用於DATETIMESTAMP 不適用
TIMEZONE_MINUTE 0059,不適用於DATETIMESTAMP 不適用
TIMEZONE_REGION 不適用於DATETIMESTAMP 不適用
TIMEZONE_ABBR 不適用於DATETIMESTAMP 不適用

日期時間資料型別和函式

以下是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); 返回xy之間的月數。
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 xtime_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 - 它使用YEARMONTH日期時間欄位儲存一段時間。第二天至第二天 - 它以天,小時,分鐘和秒儲存一段時間。
  • 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