PL/SQL - 日期與時間



本章將討論 PL/SQL 中的日期和時間。PL/SQL 中有兩類與日期和時間相關的資料型別:

  • 日期時間資料型別
  • 區間資料型別

日期時間資料型別包括:

  • 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) 是時間小數秒的精度

DATE 資料型別不適用 9(n) 部分。

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 資料型別不適用。 不適用

日期時間資料型別和函式

以下是日期時間資料型別:

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 之後下一個 day 的日期時間。

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

SELECT SYSDATE FROM DUAL; 

輸出

08/31/2012 5:25:34 PM 

示例 2

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

輸出

31-08-2012 05:26:14

示例 3

SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;

輸出

01/31/2013 5:26:31 PM 

示例 4

SELECT LOCALTIMESTAMP FROM DUAL; 

輸出

8/31/2012 5:26:55.347000 PM 

區間資料型別和函式

以下是區間資料型別:

  • 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。

廣告