在本章中,我们将讨论PL/SQL中的日期和时间. PL/SQL : 中有两类与日期和时间相关的数据类型;
日期时间数据类型
区间数据类型
日期时间数据类型为 :
DATE
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
Interval数据类型为 :
INTERVAL每年至月
间隔日至第二天
日期时间和间隔数据类型均由字段组成.这些字段的值确定数据类型的值.下表列出了日期时间和间隔的字段及其可能的值.
字段名称 | 有效的日期时间值 | 有效间隔值 |
---|---|---|
年 | - 4712至9999 (不包括第0年) | 任何非零整数 |
MONTH | 01到12 | 0到11 |
DAY | 01到31(受MONTH和YEAR的值限制,根据语言环境的日历规则) | 任何非零整数 |
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. | 不适用 |
以下是Datetime数据类型 :
它以字符和数字数据类型存储日期和时间信息.由世纪,年,月,日,小时,分钟和秒组成的信息.它被指定为 :
它是DATE数据类型的扩展.它存储DATE数据类型的年,月和日,以及小时,分钟和秒值.它对于存储精确的时间值很有用.
它是TIMESTAMP的变体,包括时区区域名称或时区偏移量.时区偏移量是差值(以小时为单位)当地时间和UTC之间的这种数据类型对于收集和评估跨地理区域的日期信息很有用.
这是TIMESTAMP的另一个变体,其值包含时区偏移.
下表提供了Datetime函数(其中,x有日期时间值) :
S .No | 功能名称&描述 |
---|---|
1 | ADD_MONTHS(x,y); 将 y 个月添加到 x . |
2 | LAST_DAY(x); 返回该月的最后一天. |
3 | MONTHS_BETWEEN(x,y); 返回 x |
4 | NEXT_DAY(x,day); 在 x 之后返回下一个天的日期时间. |
5 | NEW_TIME; 返回u指定的时区的时间/日期值ser. |
6 | ROUND(x [,unit]); 轮 x . |
7 | SYSDATE(); 返回当前日期时间. |
8 | TRUNC(x [,unit]); 截断 x . |
时间戳功能(其中, x有一个时间戳值) :
S.No | 函数名称和描述 |
---|---|
1 | CURRENT_TIMESTAMP(); 返回TIMESTAMP WITH TIME ZONE包含当前会话时间以及会话时区. |
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指定给TIMESTAMP WITH TIMEZONE的时区. |
4 | LOCALTIMESTAMP(); 返回包含以下内容的TIMESTAMP会话时区的当地时间. |
5 | SYSTIMESTAMP(); 返回TIMESTAMP WITH TIME ZONE包含当前数据库时间以及数据库时区. |
6 | SYS_EXTRACT_UTC(x); 转换TIMESTAMP TIMEZONE x到包含UTC的日期和时间的TIMESTAMP. |
7 | TO_TIMESTAMP(x,[format]); 将字符串x转换为TIMESTAMP. |
8 | TO_TIMESTAMP_TZ(x,[format]); 将字符串x转换为TIMESTAMP WITH TIMEZONE. |
以下代码片段说明了上述功能的使用和减号;
示例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和MONTH日期时间字段存储一段时间.
INTERVAL DAY TO SECOND : 它以天,小时,分钟和秒为单位存储一段时间.
S.No | 功能名称&描述 |
---|---|
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. |