一、interval函数
interval函数用于将一个整形值转换成时间值date类型的年月或时分秒。
oracle语法:
interval 'integer [- integer]' {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND} [(precision)][TO {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND}]
注:
1、年、月、日、时、分、秒可以单独使用。
2、{YEAR | MONTH} to {YEAR | MONTH}和
{DAY | HOUR | MINUTE | SECOND} to {DAY | HOUR | MINUTE | SECOND}是分别使用。
3、该函数常用来计算一段时间差。
4、precision为精度域,有效范围是0到9,默认值为2。这里精度是指显示结果的精度,如果结果超过两位长度要指定精度。
例子:
1、表示2个年
select interval '2' year from dual;
INTERVAL'2'YEAR
---------------------------------------------------------------------------
+02-00
2、表示1234个年
select interval '1234' year(4) from dual;
INTERVAL'1234'YEAR(4)
---------------------------------------------------------------------------
+1234-00
3、表示120个月
1)不加精度
select interval '120' month from dual;
INTERVAL'120'MONTH
---------------------------------------------------------------------------
+10-00
2)加精度
select interval '120' month(3) from dual;
INTERVAL'120'MONTH(3)
---------------------------------------------------------------------------
+010-00
4、表示2天
select interval '2' day from dual;
INTERVAL'2'DAY
---------------------------------------------------------------------------
+02 00:00:00
5、时、分、秒的单独用法以此类推
6、表示一个具体的时间(日到秒)
select interval '2 12:00:59' day to second from dual;
INTERVAL'212:00:59'DAYTOSECOND
---------------------------------------------------------------------------
+02 12:00:59.000000
7、表示一个具体的时间(年到月)
select interval '21-10' year to month from dual;
INTERVAL'21-10'YEARTOMONTH
---------------------------------------------------------------------------
+21-10
二、numtodsinterval
numtodsinterval函数,用于将整数转换成时间值date类型的日、时、分、秒。
语法:
numtodsinterval(n, 'interval_unit')
n为整数,interval_unit可以为day,hour,minute,second。该函数不能转换为year和month。
例子:
1、表示100秒
select numtodsinterval(100, 'second') from dual;
NUMTODSINTERVAL(100,'SECOND')
---------------------------------------------------------------------------
+000000000 00:01:40.000000000
2、表示200分钟
select numtodsinterval(200, 'minute') from dual;
NUMTODSINTERVAL(200,'MINUTE')
---------------------------------------------------------------------------
+000000000 03:20:00.000000000
3、表示60个小时
select numtodsinterval(60, 'hour') from dual;
NUMTODSINTERVAL(60,'HOUR')
---------------------------------------------------------------------------
+000000002 12:00:00.000000000
4、表示80个天
select numtodsinterval(80, 'day') from dual;
NUMTODSINTERVAL(80,'DAY')
---------------------------------------------------------------------------
+000000080 00:00:00.000000000
三、numtoyminterval
numtoyminterval函数,用于将整数转换成时间值date类型的年、月。
语法:
numtoyminterval(n, 'interval_unit')
n为整数,interval_unit可以为year,month。
例子:
1、表示1234年
select numtoyminterval(1234, 'year') from dual;
NUMTOYMINTERVAL(1234,'YEAR')
---------------------------------------------------------------------------
+000001234-00
2、表示120个月
select numtoyminterval(120, 'month') from dual;
NUMTOYMINTERVAL(120,'MONTH')
---------------------------------------------------------------------------
+000000010-00
从例子可以看出numtodsinterval函数、numtoyminterval函数和interval函数加上精度后的效果是一样的。
四、函数的作用
那么问题来了,这些时间转换函数的作用在哪里呢?
如果我们要计算一个date类型的值加上100秒、200分钟、80小时、60天、18个月、21年,就可以使用这些函数来进行计算。
例子:
1、
select sysdate, sysdate + interval '20' day as res from dual;
SYSDATE RES
--------------- ---------------
22-MAR-16 11-APR-16
2、
select sysdate, sysdate + numtoyminterval(3,'year') as res from dual;
SYSDATE RES
--------------- ---------------
22-MAR-16 22-MAR-19