
- PL/SQL 教程
- PL/SQL - 首頁
- PL/SQL - 概述
- PL/SQL - 環境
- PL/SQL - 基本語法
- PL/SQL - 資料型別
- PL/SQL - 變數
- PL/SQL - 常量和字面量
- PL/SQL - 運算子
- PL/SQL - 條件語句
- PL/SQL - 迴圈語句
- PL/SQL - 字串
- PL/SQL - 陣列
- PL/SQL - 過程
- PL/SQL - 函式
- PL/SQL - 遊標
- PL/SQL - 記錄
- PL/SQL - 異常處理
- PL/SQL - 觸發器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事務
- PL/SQL - 日期與時間
- PL/SQL - DBMS 輸出
- PL/SQL - 面向物件
- PL/SQL 有用資源
- PL/SQL - 問答
- PL/SQL - 快速指南
- PL/SQL - 有用資源
- PL/SQL - 討論
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); 返回 x 和 y 之間的月份數。 |
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。 |