在本章中,我们将讨论PL/SQL中的日期和时间。 PL/SQL中有两种与日期和时间相关的数据类型 -
- 日期时间数据类型
 - 间隔数据类型
 
日期时间(Datetime)数据类型是 -
DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE
间隔数据类型是 -
INTERVAL YEAR TO MONTHINTERVAL DAY TO SECOND
日期时间和间隔数据类型的字段值
日期时间和时间间隔数据类型都由字段组成。这些字段的值决定了数据类型的值。下表列出了日期时间和间隔的字段及其可能的值。
| 字段名称 | 有效的日期时间值 | 有效的区间值 | 
|---|---|---|
YEAR | 
-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
它以字符和数字数据类型存储日期和时间信息。它由世纪,年,月,日,时,分,秒等信息组成。它被指定为 -
TIMESTAMP
它是DATE数据类型的扩展。它存储DATE数据类型的年份,月份和日期以及小时,分钟和秒值。这对于存储精确的时间值非常有用。
TIMESTAMP WITH TIME ZONE
它是TIMESTAMP的一个变体,其中包含时区名称或时区偏移量。时区偏移量是本地时间与UTC之间的时差(小时和分钟)。此数据类型对于收集和评估跨地理区域的日期信息非常有用。
TIMESTAMP WITH LOCAL TIME ZONE
它是TIMESTAMP的另一个变体,它的值包括一个时区偏移量。下表提供了日期时间函数(其中,x具有日期时间值) -
| 编号 | 函数名称 | 描述 | 
|---|---|---|
| 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有时间戳值) -
| 编号 | 函数名称 | 描述 | 
|---|---|---|
| 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 WITH TIMEZONE x转换为包含UTC中的日期和时间的TIMESTAMP。 | 
| 7 | TO_TIMESTAMP(x, [format]); | 
将字符串x转换为TIMESTAMP。 | 
| 8 | TO_TIMESTAMP_TZ(x, [format]); | 
将字符串x转换为TIMESTAMP WITH TIMEZONE。 | 
例子
以下代码片段说明了上述函数的使用 -
示例1
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
--------------
07-11月-17
示例2
SQL> SELECT TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
TO_CHAR(CURRENT_DAT
-------------------
2017-11-07 05:26:07
示例3
SQL> SELECT ADD_MONTHS(SYSDATE, 5) FROM DUAL;
ADD_MONTHS(SYS
--------------
07-4月 -18
示例4
SQL> SELECT LOCALTIMESTAMP FROM DUAL;
LOCALTIMESTAMP
---------------------------------------------------------------------------
07-11月-17 05.27.13.752000 上午
区间数据类型和函数
以下是区间数据类型 -
INTERVAL YEAR TO MONTH- 它使用YEAR和MONTH日期时间字段存储一段时间。第二天至第二天 - 它以天,小时,分钟和秒存储一段时间。INTERVAL DAY TO SECOND- 它以天,小时,分钟和秒的形式存储一段时间。
区间函数
| 编号 | 函数 | 描述 | 
|---|---|---|
| 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。 | 
						上一篇:
								PL/SQL事务
												下一篇:
								PL/SQL DBMS输出
												
						
						
					
					
					