Plsql 简明教程
PL/SQL - Date & Time
在本章里,我们将讨论 PL/SQL 中的日期和时间。在 PL/SQL 中有两类日期和时间相关数据类型 -
-
Datetime data types
-
Interval data types
Datetime 数据类型是 -
-
DATE
-
TIMESTAMP
-
TIMESTAMP WITH TIME ZONE
-
带本地时区的 TIMESTAMP
区间数据类型包括 −
-
INTERVAL YEAR TO MONTH
-
INTERVAL DAY TO SECOND
Field Values for Datetime and Interval Data Types
datetime 和 interval 数据类型均由 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
以下是日期时间数据类型 −
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); 返回 x 和 y 之间的月份数。 |
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 数据类型:
-
IINTERVAL YEAR TO MONTH - 使用 YEAR 和 MONTH datetime 字段存储一段时间。
-
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。 |