在本章中,我们将讨论pl/sql中的日期和时间。 pl/sql中有两种与日期和时间相关的数据类型 -
日期时间(datetime)数据类型是 -
date
timestamp
timestamp with time zone
timestamp with local time zone
间隔数据类型是 -
interval year to month
interval 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 。 |