PL/SQL日期及時間

PL/SQL提供兩個日期和時間相關的數據類型:

  • 日期時間(Datetime)數據類型

  • 間隔數據類型

datetime數據類型有:

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

間隔數據類型是:

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

日期時間字段值和間隔數據類型

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

字段名稱

有效日期時間值

有效的間隔值

YEAR

-4712 to 9999 (除外0年)

任何非0整數

MONTH

01 - 12

0 - 11

DAY

01 - 31 (受MONTH和YEAR的數值,按日曆的區域設置的規則)

任何非0整數

HOUR

00 - 23

0 - 23

MINUTE

00 - 59

0 - 59

SECOND

00 to 59.9(n), 其中,9(n)是時間小數秒精度
在9(n)的部分是不適用DATE。

0 to 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 - 它是日期數據類型的擴展。它的年,月,日的日期數據類型的存儲,以及小時,分鐘和秒值。它是用於存儲精確的時間值有用。

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

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

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

S.N

函數名稱 & 描述

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是一個時間戳值):

S.N

函數名稱 & 描述

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);
通過TIME_ZONE指定WITH TIMEZONE一個TIMESTAMP時間戳x和時區轉換

4

LOCALTIMESTAMP();
返回包含在會話時區的本地時間時間戳

5

SYSTIMESTAMP();
返回含有當前數據庫的時間以及數據庫時區的時區中的時間戳(TIMESTAMP WITH TIME ZONE)

6

SYS_EXTRACT_UTC(x);
WITH TIMEZONE X的TIMESTAMP轉換爲包含日期和時間UTC時間戳

7

TO_TIMESTAMP(x, [format]);
將字符串x轉換爲一個TIMESTAMP

8

TO_TIMESTAMP_TZ(x, [format]);
字符串x轉換到WITH TIMEZONE時間戳

示例:

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

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

間隔數據類型和函數

以下是間隔數據類型:

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

  • INTERVAL DAY TO SECOND - 它存儲了一段時間中的天,小時,分鐘和秒

間隔函數:

S.N

函數名稱 & 描述

1

NUMTODSINTERVAL(x, interval_unit);
整數x轉換爲一個間隔(DAY TO SECOND)

2

NUMTOYMINTERVAL(x, interval_unit);
x到時間間隔(YEAR TO MONTH)數的轉換

3

TO_DSINTERVAL(x);
將字符串x時間間隔(DAY TO SECOND)到秒轉換

4

TO_YMINTERVAL(x);
將字符串x時間間隔(YEAR TO MONTH)轉換爲整數