PL/SQL - 日期 & 时间
在本章中,我们将讨论 PL/SQL 中的日期和时间。 PL/SQL 中有两类与日期和时间相关的数据类型 −
- 日期时间数据类型
- 间隔数据类型
日期时间数据类型是 −
- 日期
- 时间戳
- 带有时区的时间戳
- 带有当地时区的时间戳
间隔数据类型是 −
- 间隔年到月
- 间隔天到第二次
日期时间和间隔数据类型的字段值
datetime 和 interval 数据类型都由 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); 返回 x 和 y 之间的月数。 |
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 转换为年到月的间隔。 |