鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ PL/SQL日期及時(shí)間
PL/SQL記錄
PL/SQL基本語(yǔ)法
PL/SQL集合
PL/SQL包
PL/SQL關(guān)系運(yùn)算符
PL/SQL比較運(yùn)算符
PL/SQL條件控制
PL/SQL字符串
PL/SQL算術(shù)運(yùn)算符
PL/SQL變量
PL/SQL IF-THEN-ELSIF語(yǔ)句
PL/SQL函數(shù)
PL/SQL異常
PL/SQL FOR循環(huán)語(yǔ)句
PL/SQL日期及時(shí)間
PL/SQL EXIT語(yǔ)句
PL/SQL DBMS輸出
PL/SQL過(guò)程
PL/SQL CONTINUE語(yǔ)句
PL/SQL數(shù)組
PL/SQL嵌套IF-THEN-ELSE語(yǔ)句
PL/SQL事務(wù)
PL/SQL CASE語(yǔ)句
PL/SQL IF-THEN語(yǔ)句
PL/SQL GOTO語(yǔ)句
PL/SQL運(yùn)算符優(yōu)先級(jí)
PL/SQL觸發(fā)器
PL/SQL運(yùn)算符
PL/SQL教程
PL/SQL WHILE循環(huán)語(yǔ)句
PL/SQL面向?qū)ο?/span>
PL/SQL循環(huán)
PL/SQL邏輯運(yùn)算符
PL/SQL IF-THEN-ELSE語(yǔ)句
PL/SQL數(shù)據(jù)類型
PL/SQL環(huán)境安裝設(shè)置
PL/SQL游標(biāo)
PL/SQL基本循環(huán)語(yǔ)句
PL/SQL搜索CASE語(yǔ)句
PL/SQL常量和文字
PL/SQL嵌套循環(huán)

PL/SQL日期及時(shí)間

PL/SQL提供兩個(gè)日期和時(shí)間相關(guān)的數(shù)據(jù)類型:

  • 日期時(shí)間(Datetime)數(shù)據(jù)類型

  • 間隔數(shù)據(jù)類型

datetime數(shù)據(jù)類型有:

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

間隔數(shù)據(jù)類型是:

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

日期時(shí)間字段值和間隔數(shù)據(jù)類型

這兩個(gè)日期時(shí)間和間隔數(shù)據(jù)類型包括字段。這些字段的值確定的數(shù)據(jù)類型的值。下表列出了時(shí)間和間隔的字段及其可能的值。

字段名稱 有效日期時(shí)間值 有效的間隔值
YEAR -4712 to 9999 (除外0年) 任何非0整數(shù)
MONTH 01 - 12 0 - 11
DAY 01 - 31 (受MONTH和YEAR的數(shù)值,按日歷的區(qū)域設(shè)置的規(guī)則) 任何非0整數(shù)
HOUR 00 - 23 0 - 23
MINUTE 00 - 59 0 - 59
SECOND 00 to 59.9(n), 其中,9(n)是時(shí)間小數(shù)秒精度
在9(n)的部分是不適用DATE。
0 to 59.9(n), 其中,9(n)是區(qū)間小數(shù)秒精度
TIMEZONE_HOUR -12 - 14 (適應(yīng)范圍夏令時(shí)更改)
DATE 或 TIMESTAMP不適用.
不適用
TIMEZONE_MINUTE 00 - 59
DATE 或 TIMESTAMP不適用.
不適用
TIMEZONE_REGION DATE 或 TIMESTAMP不適用. 不適用
TIMEZONE_ABBR DATE 或 TIMESTAMP不適用. 不適用

日期時(shí)間數(shù)據(jù)類型和函數(shù)

下面是日期時(shí)間數(shù)據(jù)類型:

  • DATE - 它存儲(chǔ)在字符和數(shù)字?jǐn)?shù)據(jù)類型的日期和時(shí)間信息。它是由上世紀(jì),年,月,日,時(shí),分,秒的信息。它被指定為:

  • TIMESTAMP - 它是日期數(shù)據(jù)類型的擴(kuò)展。它的年,月,日的日期數(shù)據(jù)類型的存儲(chǔ),以及小時(shí),分鐘和秒值。它是用于存儲(chǔ)精確的時(shí)間值有用。

  • TIMESTAMP WITH TIME ZONE - 它是時(shí)間戳的變體,其中包括一個(gè)時(shí)區(qū)區(qū)域名稱或時(shí)區(qū)中它的值偏移。時(shí)區(qū)偏移量是本地的時(shí)間和UTC之間的差值(以小時(shí)和分鐘)。此數(shù)據(jù)類型是用于收集和計(jì)算跨越地理區(qū)域的最新信息有用。

  • TIMESTAMP WITH LOCAL TIME ZONE - 它是時(shí)間戳(TIMESTAMP )的另一種變型,其中包括一個(gè)時(shí)區(qū)中它的值偏移。

下表列出了日期時(shí)間函數(shù)(其中,x有日期時(shí)間值):

S.N 函數(shù)名稱 & 描述
1 ADD_MONTHS(x, y);
增加y個(gè)月到x
2 LAST_DAY(x);
返回該月的最后一天
3 MONTHS_BETWEEN(x, y);
返回x和y之間的月數(shù)
4 NEXT_DAY(x, day);
返回x后第二天的日期時(shí)間
5 NEW_TIME;
返回從由用戶指定的一個(gè)時(shí)區(qū)的時(shí)間/天的值
6 ROUND(x [, unit]);
x舍入;
7 SYSDATE();
返回當(dāng)前日期時(shí)間。
8 TRUNC(x [, unit]);
截?cái)鄕

時(shí)間戳函數(shù)(其中,x是一個(gè)時(shí)間戳值):

S.N 函數(shù)名稱 & 描述
1 CURRENT_TIMESTAMP();
返回包含當(dāng)前會(huì)話時(shí)間以及會(huì)話時(shí)區(qū)的時(shí)區(qū)中的時(shí)間戳( TIMESTAMP WITH TIME ZONE)
2 EXTRACT({ YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } | { TIMEZONE_HOUR | TIMEZONE_MINUTE } | { TIMEZONE_REGION | } TIMEZONE_ABBR ) FROM x)
從x提取并返回年,月,日,時(shí),分,秒,或時(shí)間;
3 FROM_TZ(x, time_zone);
通過(guò)TIME_ZONE指定WITH TIMEZONE一個(gè)TIMESTAMP時(shí)間戳x和時(shí)區(qū)轉(zhuǎn)換
4 LOCALTIMESTAMP();
返回包含在會(huì)話時(shí)區(qū)的本地時(shí)間時(shí)間戳
5 SYSTIMESTAMP();
返回含有當(dāng)前數(shù)據(jù)庫(kù)的時(shí)間以及數(shù)據(jù)庫(kù)時(shí)區(qū)的時(shí)區(qū)中的時(shí)間戳(TIMESTAMP WITH TIME ZONE)
6 SYS_EXTRACT_UTC(x);
WITH TIMEZONE X的TIMESTAMP轉(zhuǎn)換為包含日期和時(shí)間UTC時(shí)間戳
7 TO_TIMESTAMP(x, [format]);
將字符串x轉(zhuǎn)換為一個(gè)TIMESTAMP
8 TO_TIMESTAMP_TZ(x, [format]);
字符串x轉(zhuǎn)換到WITH TIMEZONE時(shí)間戳

示例:

下面的代碼段示出了使用上述函數(shù)功能:

SELECT SYSDATE FROM DUAL;

輸出:

08/31/2014 5:25:34 PM
SELECT TO_CHAR(CURRENT_DATE, 'DD-MM-YYYY HH:MI:SS') FROM DUAL;

輸出:

31-08-2014 05:26:14
SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;

輸出:

01/31/2014 5:26:31 PM
SELECT LOCALTIMESTAMP FROM DUAL;

輸出:

8/31/2014 5:26:55.347000 PM

間隔數(shù)據(jù)類型和函數(shù)

以下是間隔數(shù)據(jù)類型:

  • INTERVAL YEAR TO MONTH - 它存儲(chǔ)了一段時(shí)間的使用年份和月份日期時(shí)間字段

  • INTERVAL DAY TO SECOND - 它存儲(chǔ)了一段時(shí)間中的天,小時(shí),分鐘和秒

間隔函數(shù):

S.N 函數(shù)名稱 & 描述
1 NUMTODSINTERVAL(x, interval_unit);
整數(shù)x轉(zhuǎn)換為一個(gè)間隔(DAY TO SECOND)
2 NUMTOYMINTERVAL(x, interval_unit);
x到時(shí)間間隔(YEAR TO MONTH)數(shù)的轉(zhuǎn)換
3 TO_DSINTERVAL(x);
將字符串x時(shí)間間隔(DAY TO SECOND)到秒轉(zhuǎn)換
4 TO_YMINTERVAL(x);
將字符串x時(shí)間間隔(YEAR TO MONTH)轉(zhuǎn)換為整數(shù)