- PL/SQL 教程
- PL/SQL - 主页
- PL/SQL - 概述
- PL/SQL - 环境
- PL/SQL - 基本语法
- PL/SQL - 数据类型
- PL/SQL - 变量
- PL/SQL - 常量和文字
- PL/SQL - 运算符
- PL/SQL - 条件
- PL/SQL - 循环
- PL/SQL - 字符串
- PL/SQL - 数组
- PL/SQL - 过程
- PL/SQL - 函数
- PL/SQL - 游标
- PL/SQL - 记录
- PL/SQL - 异常
- PL/SQL - 触发器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事务
- PL/SQL - 日期和时间
- PL/SQL - DBMS 输出
- PL/SQL - 面向对象
- PL/SQL 有用资源
- PL/SQL - 问题与解答
- PL/SQL - 快速指南
- PL/SQL - 有用的资源
- PL/SQL - 讨论
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); 返回x和y之间的月数。 |
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。 |