PL/SQL - 日期 & 时间

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

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

日期时间数据类型是 −

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

间隔数据类型是 −

  • 间隔年到月
  • 间隔天到第二次

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

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

字段名 有效日期时间值 有效间隔值
YEAR -4712 到 9999(不包括第 0 年) 任意非零整数
MONTH 01 到 12 0 到 11
DAY 01 到 31(受 MONTH 和 YEAR 的值限制,根据 locale 的日历规则) 任意非零整数
HOUR 00 到 23 0 到 23
MINUTE 00 到 59 0 到 59
SECOND

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

带有时区的时间戳

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

带有当地时区的时间戳

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

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

S.No Function Name & Description
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]);

Rounds x.

7

SYSDATE();

返回当前日期时间。

8

TRUNC(x [, unit]);

截断x

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

S.No Function Name & Description
1

CURRENT_TIMESTAMP();

返回一个带时区的时间戳,其中包含当前会话时间以及会话时区。

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 x 和 time_zone 指定的时区转换为带有时区的时间戳。

4

LOCALTIMESTAMP();

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

5

SYSTIMESTAMP();

返回包含当前数据库时间和数据库时区的带时区的时间戳。

6

SYS_EXTRACT_UTC(x);

将带有时区的时间戳 x 转换为包含 UTC 日期和时间的 TIMESTAMP。

7

TO_TIMESTAMP(x, [format]);

将字符串 x 转换为时间戳。

8

TO_TIMESTAMP_TZ(x, [format]);

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

示例

以下代码片段说明了上述函数的使用 −

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

区间数据类型和函数

以下是区间数据类型 −

  • 年到月的间隔 − 它使用 YEAR 和 MONTH 日期时间字段存储一段时间。

  • 天到秒的间隔 − 它以天、小时、分钟和秒的形式存储一段时间。

区间函数

S.No Function Name & Description
1

NUMTODSINTERVAL(x, interval_unit);

将数字 x 转换为转换为天到秒的间隔。

2

NUMTOYMINTERVAL(x, interval_unit);

将数字 x 转换为年到月的间隔。

3

TO_DSINTERVAL(x);

将字符串 x 转换为天到秒的间隔。

4

TO_YMINTERVAL(x);

将字符串 x 转换为年到月的间隔。