PL/SQL提供两个日期和时间相关的数据类型:
-
日期时间(Datetime)数据类型
-
间隔数据类型
datetime数据类型有:
-
DATE
-
TIMESTAMP
-
TIMESTAMP WITH TIME ZONE
-
TIMESTAMP WITH LOCAL TIME ZONE
间隔数据类型是:
-
INTERVAL YEAR TO MONTH
-
INTERVAL DAY TO SECOND
日期时间字段值和间隔数据类型
这两个日期时间和间隔数据类型包括字段。这些字段的值确定的数据类型的值。下表列出了时间和间隔的字段及其可能的值。
字段名称 | 有效日期时间值 | 有效的间隔值 |
---|---|---|
YEAR | -4712 to 9999 (除外0年) | 任何非0整数 |
MONTH | 01 - 12 | 0 - 11 |
DAY | 01 - 31 (受MONTH和YEAR的数值,按日历的区域设置的规则) | 任何非0整数 |
HOUR | 00 - 23 | 0 - 23 |
MINUTE | 00 - 59 | 0 - 59 |
SECOND | 00 to 59.9(n), 其中,9(n)是时间小数秒精度 在9(n)的部分是不适用DATE。 |
0 to 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 - 它存储在字符和数字数据类型的日期和时间信息。它是由上世纪,年,月,日,时,分,秒的信息。它被指定为:
-
TIMESTAMP - 它是日期数据类型的扩展。它的年,月,日的日期数据类型的存储,以及小时,分钟和秒值。它是用于存储精确的时间值有用。
-
TIMESTAMP WITH TIME ZONE - 它是时间戳的变体,其中包括一个时区区域名称或时区中它的值偏移。时区偏移量是本地的时间和UTC之间的差值(以小时和分钟)。此数据类型是用于收集和计算跨越地理区域的最新信息有用。
-
TIMESTAMP WITH LOCAL TIME ZONE - 它是时间戳(TIMESTAMP )的另一种变型,其中包括一个时区中它的值偏移。
下表列出了日期时间函数(其中,x有日期时间值):
S.N | 函数名称 & 描述 |
---|---|
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]); x舍入; |
7 | SYSDATE(); 返回当前日期时间。 |
8 | TRUNC(x [, unit]); 截断x |
时间戳函数(其中,x是一个时间戳值):
S.N | 函数名称 & 描述 |
---|---|
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); 通过TIME_ZONE指定WITH TIMEZONE一个TIMESTAMP时间戳x和时区转换 |
4 | LOCALTIMESTAMP(); 返回包含在会话时区的本地时间时间戳 |
5 | SYSTIMESTAMP(); 返回含有当前数据库的时间以及数据库时区的时区中的时间戳(TIMESTAMP WITH TIME ZONE) |
6 | SYS_EXTRACT_UTC(x); WITH TIMEZONE X的TIMESTAMP转换为包含日期和时间UTC时间戳 |
7 | TO_TIMESTAMP(x, [format]); 将字符串x转换为一个TIMESTAMP |
8 | TO_TIMESTAMP_TZ(x, [format]); 字符串x转换到WITH TIMEZONE时间戳 |
示例:
下面的代码段示出了使用上述函数功能:
SELECT SYSDATE FROM DUAL;
输出:
08/31/2014 5:25:34 PM
SELECT TO_CHAR(CURRENT_DATE, ‘DD-MM-YYYY HH:MI:SS‘) FROM DUAL;
输出:
31-08-2014 05:26:14
SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;
输出:
01/31/2014 5:26:31 PM
SELECT LOCALTIMESTAMP FROM DUAL;
输出:
8/31/2014 5:26:55.347000 PM
间隔数据类型和函数
以下是间隔数据类型:
-
INTERVAL YEAR TO MONTH - 它存储了一段时间的使用年份和月份日期时间字段
-
INTERVAL DAY TO SECOND - 它存储了一段时间中的天,小时,分钟和秒
间隔函数:
S.N | 函数名称 & 描述 |
---|---|
1 | NUMTODSINTERVAL(x, interval_unit); 整数x转换为一个间隔(DAY TO SECOND) |
2 | NUMTOYMINTERVAL(x, interval_unit); x到时间间隔(YEAR TO MONTH)数的转换 |
3 | TO_DSINTERVAL(x); 将字符串x时间间隔(DAY TO SECOND)到秒转换 |
4 | TO_YMINTERVAL(x); 将字符串x时间间隔(YEAR TO MONTH)转换为整数 |