Plsql 简明教程

PL/SQL - Date & Time

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

  1. Datetime data types

  2. Interval data types

Datetime 数据类型是 -

  1. DATE

  2. TIMESTAMP

  3. TIMESTAMP WITH TIME ZONE

  4. 带本地时区的 TIMESTAMP

区间数据类型包括 −

  1. INTERVAL YEAR TO MONTH

  2. INTERVAL DAY TO SECOND

Field Values for Datetime and Interval Data Types

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

Field Name

Valid Datetime Values

Valid Interval Values

YEAR

-4712 到 9999(不包括公元 0 年)

Any nonzero integer

MONTH

01 to 12

0 to 11

DAY

01 到 31(受 MONTH 和 YEAR 的值限制,根据该国家/地区的日历规则)

Any nonzero integer

HOUR

00 to 23

0 to 23

MINUTE

00 to 59

0 to 59

SECOND

00 至 59.9(n),其中 9(n) 是时间的小数秒精度。9(n) 部分不适用于 DATE。

0 到 59.9(n),其中 9(n) 是间隔分数秒的精度

TIMEZONE_HOUR

-12 至 14(范围适用于夏令时变化)。不适用于 DATE 或 TIMESTAMP。

Not applicable

TIMEZONE_MINUTE

00 至 59。不适用于 DATE 或 TIMESTAMP。

Not applicable

TIMEZONE_REGION

不适用于 DATE 或 TIMESTAMP。

Not applicable

TIMEZONE_ABBR

不适用于 DATE 或 TIMESTAMP。

Not applicable

The Datetime Data Types and Functions

以下是日期时间数据类型 −

DATE

它在字符和数字数据类型中都存储日期和时间信息。它由世纪、年份、月份、日期、小时、分钟和秒的信息组成。它指定为 −

TIMESTAMP

它是 DATE 数据类型的扩展。它存储 DATE 数据类型的年、月和日,以及小时、分钟和秒值。它适用于存储精确的时间值。

TIMESTAMP WITH TIME ZONE

它是 TIMESTAMP 的变体,在其值中包含时区区域名称或时区偏移。时区偏移是以小时和分钟表示的本地时间与 UTC 时间之间的差异。这种数据类型适用于跨地理区域收集和评估日期信息。

TIMESTAMP WITH LOCAL TIME ZONE

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

下表提供了日期时间函数(其中 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(); Returns the current datetime.

8

TRUNC(x [, unit]); Truncates x.

时间戳函数(其中 x 具有时间戳值)−

S.No

Function Name & Description

1

CURRENT_TIMESTAMP(); 返回一个 TIMESTAMP WITH TIME ZONE,其中包含当前会话时间以及会话时区。

2

*EXTRACT({ YEAR

MONTH

DAY

HOUR

MINUTE

SECOND }

{ TIMEZONE_HOUR

TIMEZONE_MINUTE }

{ TIMEZONE_REGION

} TIMESTAMP_ABBR ) 中提取并返回年、月、日、时、分、秒或时区。

3

FROM_TZ(x, time_zone); 将 TIMESTAMP x 和时区 time_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

Examples

以下代码片段展示了上述函数的使用方法:

Example 1

SELECT SYSDATE FROM DUAL;

Output

08/31/2012 5:25:34 PM

Example 2

SELECT TO_CHAR(CURRENT_DATE, 'DD-MM-YYYY HH:MI:SS') FROM DUAL;

Output

31-08-2012 05:26:14

Example 3

SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;

Output

01/31/2013 5:26:31 PM

Example 4

SELECT LOCALTIMESTAMP FROM DUAL;

Output

8/31/2012 5:26:55.347000 PM

The Interval Data Types and Functions

以下是 Interval 数据类型:

  1. IINTERVAL YEAR TO MONTH - 使用 YEAR 和 MONTH datetime 字段存储一段时间。

  2. INTERVAL DAY TO SECOND - 使用天、小时、分钟和秒存储一段时间。

Interval Functions

S.No

Function Name & Description

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。