阅读(3685) (0)

PL/SQL 日期及时间

2021-08-30 14:38:30 更新

在本章中,我们将讨论PL/SQL中的日期和时间。 PL/SQL中有两种与日期和时间相关的数据类型 -

  • 日期时间数据类型
  • 间隔数据类型

日期时间(Datetime)数据类型是 -

  • DATE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
  • TIMESTAMP WITH LOCAL TIME ZONE

间隔数据类型是 -

  • INTERVAL YEAR TO MONTH
  • INTERVAL DAY TO SECOND

日期时间和间隔数据类型的字段值

日期时间和时间间隔数据类型都由字段组成。这些字段的值决定了数据类型的值。下表列出了日期时间和间隔的字段及其可能的值。

字段名称 有效的日期时间值 有效的区间值
YEAR -47129999(不包括0年) 任何四位非零整数
MONTH 0112 011
DAY 0131(受MONTHYEAR的值限制,根据地区的日历规则) 任何非零整数
HOUR 0023 023
MINUTE 0059 059
SECOND 0059.9(n),其中9(n)是时间小数秒的精确度,9(n)部分不适用于DATE 059.9(n),其中9(n)是间隔小数秒的精确度
TIMEZONE_HOUR -1214(范围适应夏时制的变化),不适用于DATETIMESTAMP 不适用
TIMEZONE_MINUTE 0059,不适用于DATETIMESTAMP 不适用
TIMEZONE_REGION 不适用于DATETIMESTAMP 不适用
TIMEZONE_ABBR 不适用于DATETIMESTAMP 不适用

日期时间数据类型和函数

以下是Datetime数据类型 -

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之后的第二天的日期时间。
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 xtime_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

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

区间数据类型和函数

以下是区间数据类型 -

  • 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