PL/SQL - 日期和时间


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

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

日期时间数据类型是 -

  • 日期
  • 时间戳
  • 带时区的时间戳
  • 带有本地时区的时间戳

间隔数据类型是 -

  • 年月间隔
  • 日至秒的间隔

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

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

字段名称 有效日期时间值 有效间隔值
-4712 至 9999(不包括 0 年) 任何非零整数
01 至 12 0 至 11
01 到 31(受 MONTH 和 YEAR 值的限制,根据区域设置的日历规则) 任何非零整数
小时 00 至 23 0 至 23
分钟 00 至 59 0 至 59
第二

00 到 59.9(n),其中 9(n) 是时间小数秒的精度

9(n) 部分不适用于 DATE。

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 数据类型的扩展。它存储 DATE 数据类型的年、月、日,以及小时、分钟和秒值。它对于存储精确的时间值很有用。

带时区的时间戳

它是 TIMESTAMP 的变体,在其值中包含时区区域名称或时区偏移量。时区偏移是当地时间与 UTC 之间的差异(以小时和分钟为单位)。此数据类型对于收集和评估跨地理区域的日期信息非常有用。

带有本地时区的时间戳

它是 TIMESTAMP 的另一种变体,其值中包含时区偏移量。

下表提供了日期时间函数(其中,x 具有日期时间值) -

序列号 函数名称和描述
1

添加月(x,y);

y 个月添加到x

2

最后一天(x);

返回该月的最后一天。

3

MONTHS_BETWEEN(x, y);

返回xy之间的月数。

4

NEXT_DAY(x, 天);

返回x之后第二天的日期时间。

5

新时间;

返回用户指定的时区的时间/日期值。

6

ROUND(x [, 单位]);

回合x

7

系统日期();

返回当前日期时间。

8

TRUNC(x [, 单位]);

截断x

时间戳函数(其中,x 有一个时间戳值)-

序列号 函数名称和描述
1

当前_时间戳();

返回包含当前会话时间以及会话时区的 TIMESTAMP WITH TIME ZONE。

2

EXTRACT({ 年 | 月 | 日 | 小时 | 分钟 | 秒 } | { TIMEZONE_HOUR | TIMEZONE_MINUTE } | { TIMEZONE_REGION | } TIMEZONE_ABBR ) FROM x)

从x中提取并返回年、月、日、小时、分钟、秒或时区。

3

FROM_TZ(x, 时区);

将 TIMESTAMP x 和 time_zone 指定的时区转换为 TIMESTAMP WITH TIMEZONE。

4

本地时间戳();

返回包含会话时区中的本地时间的 TIMESTAMP。

5

系统时间戳();

返回包含当前数据库时间以及数据库时区的 TIMESTAMP WITH TIME ZONE。

6

SYS_EXTRACT_UTC(x);

将 TIMESTAMP WITH TIMEZONE x 转换为包含 UTC 日期和时间的 TIMESTAMP。

7

TO_TIMESTAMP(x, [格式]);

将字符串 x 转换为 TIMESTAMP。

8

TO_TIMESTAMP_TZ(x, [格式]);

将字符串 x 转换为带有时区的 TIMESTAMP。

例子

以下代码片段说明了上述函数的用法 -

实施例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 

区间数据类型和函数

以下是间隔数据类型 -

  • IINTERVAL YEAR TO MONTH - 它使用 YEAR 和 MONTH 日期时间字段存储一段时间。

  • INTERVAL DAY TO SECOND - 它以天、小时、分钟和秒的形式存储一段时间。

区间函数

序列号 函数名称和描述
1

NUMTODSINTERVAL(x, 间隔单位);

将数字 x 转换为 INTERVAL DAY TO SECOND。

2

NUMTOYMINTERVAL(x, 间隔单位);

将数字 x 转换为 INTERVAL YEAR TO MONTH。

3

TO_DSINTERVAL(x);

将字符串 x 转换为 INTERVAL DAY TO SECOND。

4

TO_YMINTERVAL(x);

将字符串 x 转换为 INTERVAL YEAR TO MONTH。