PL/SQL 日期及時間

2021-08-30 15:54 更新

在本章中,我們將討論P(yáng)L/SQL中的日期和時間。 PL/SQL中有兩種與日期和時間相關(guān)的數(shù)據(jù)類型 -

  • 日期時間數(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ù)據(jù)類型的字段值

日期時間和時間間隔數(shù)據(jù)類型都由字段組成。這些字段的值決定了數(shù)據(jù)類型的值。下表列出了日期時間和間隔的字段及其可能的值。

字段名稱 有效的日期時間值 有效的區(qū)間值
YEAR -47129999(不包括0年) 任何四位非零整數(shù)
MONTH 0112 011
DAY 0131(受MONTHYEAR的值限制,根據(jù)地區(qū)的日歷規(guī)則) 任何非零整數(shù)
HOUR 0023 023
MINUTE 0059 059
SECOND 0059.9(n),其中9(n)是時間小數(shù)秒的精確度,9(n)部分不適用于DATE 059.9(n),其中9(n)是間隔小數(shù)秒的精確度
TIMEZONE_HOUR -1214(范圍適應(yīng)夏時制的變化),不適用于DATETIMESTAMP。 不適用
TIMEZONE_MINUTE 0059,不適用于DATETIMESTAMP。 不適用
TIMEZONE_REGION 不適用于DATETIMESTAMP。 不適用
TIMEZONE_ABBR 不適用于DATETIMESTAMP。 不適用

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

以下是Datetime數(shù)據(jù)類型 -

DATE

它以字符和數(shù)字?jǐn)?shù)據(jù)類型存儲日期和時間信息。它由世紀(jì),年,月,日,時,分,秒等信息組成。它被指定為 -

TIMESTAMP

它是DATE數(shù)據(jù)類型的擴(kuò)展。它存儲DATE數(shù)據(jù)類型的年份,月份和日期以及小時,分鐘和秒值。這對于存儲精確的時間值非常有用。

TIMESTAMP WITH TIME ZONE

它是TIMESTAMP的一個變體,其中包含時區(qū)名稱或時區(qū)偏移量。時區(qū)偏移量是本地時間與UTC之間的時差(小時和分鐘)。此數(shù)據(jù)類型對于收集和評估跨地理區(qū)域的日期信息非常有用。

TIMESTAMP WITH LOCAL TIME ZONE

它是TIMESTAMP的另一個變體,它的值包括一個時區(qū)偏移量。下表提供了日期時間函數(shù)(其中,x具有日期時間值) -

編號 函數(shù)名稱 描述
1 ADD_MONTHS(x, y); y個月添加到x。
2 LAST_DAY(x); 返回月份的最后一天。
3 MONTHS_BETWEEN(x, y); 返回xy之間的月數(shù)。
4 NEXT_DAY(x, day); 返回x之后的第二天的日期時間。
5 NEW_TIME; 返回用戶指定的時區(qū)的時間/日期值。
6 ROUND(x [, unit]); 舍入x
7 SYSDATE(); 返回當(dāng)前的日期時間。
8 TRUNC(x [, unit]); 截斷x。

時間戳函數(shù)(其中,x有時間戳值) -

編號 函數(shù)名稱 描述
1 CURRENT_TIMESTAMP(); 返回包含當(dāng)前會話時間以及會話時區(qū)的TIMESTAMP WITH TIME ZONE。
2 EXTRACT({ YEAR / MONTH / DAY / HOUR / MINUTE / SECOND } / { TIMEZONE_HOUR / TIMEZONE_MINUTE } / { TIMEZONE_REGION } TIMEZONE_ABBR ) FROM x) x中提取并返回年,月,日,小時,分鐘,秒或時區(qū)。
3 FROM_TZ(x, time_zone); TIMESTAMP xtime_zone指定的時區(qū)轉(zhuǎn)換為TIMESTAMP WITH TIMEZONE
4 LOCALTIMESTAMP(); 返回包含會話時區(qū)中本地時間的TIMESTAMP。
5 SYSTIMESTAMP(); 返回包含當(dāng)前數(shù)據(jù)庫時間的TIMESTAMP WITH TIME ZONE以及數(shù)據(jù)庫時區(qū)。
6 SYS_EXTRACT_UTC(x); TIMESTAMP WITH TIMEZONE x轉(zhuǎn)換為包含UTC中的日期和時間的TIMESTAMP。
7 TO_TIMESTAMP(x, [format]); 將字符串x轉(zhuǎn)換為TIMESTAMP
8 TO_TIMESTAMP_TZ(x, [format]); 將字符串x轉(zhuǎn)換為TIMESTAMP WITH TIMEZONE。

例子

以下代碼片段說明了上述函數(shù)的使用 -

示例1

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
--------------
07-11月-17
SQL

示例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
SQL

示例3

SQL> SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;

ADD_MONTHS(SYS
--------------
07-4月 -18
SQL

示例4

SQL> SELECT LOCALTIMESTAMP FROM DUAL;

LOCALTIMESTAMP
---------------------------------------------------------------------------
07-11月-17 05.27.13.752000 上午
SQL

區(qū)間數(shù)據(jù)類型和函數(shù)

以下是區(qū)間數(shù)據(jù)類型 -

  • INTERVAL YEAR TO MONTH - 它使用YEAR和MONTH日期時間字段存儲一段時間。第二天至第二天 - 它以天,小時,分鐘和秒存儲一段時間。
  • INTERVAL DAY TO SECOND - 它以天,小時,分鐘和秒的形式存儲一段時間。

區(qū)間函數(shù)

編號 函數(shù) 描述
1 NUMTODSINTERVAL(x, interval_unit); 將數(shù)字x轉(zhuǎn)換為INTERVAL DAY TO SECOND。
2 NUMTOYMINTERVAL(x, interval_unit); 將數(shù)字x轉(zhuǎn)換為INTERVAL YEAR TO MONTH。
3 TO_DSINTERVAL(x); 將字符串x轉(zhuǎn)換為INTERVAL DAY TO SECOND
4 TO_YMINTERVAL(x); 將字符串x轉(zhuǎn)換為INTERVAL YEAR TO MONTH。

 



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號