oracle interval函数

一、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

参考资料:
http://blog.sina.com.cn/s/blog_854ec93b0101aahp.html
http://blog.itpub.net/12932950/viewspace-624507/