语法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]
该数据类型常用来表示一段时间差, 注意时间差只精确到年和月. precision为年或月的精确域, 有效范围是0到9, 默认值为2.
用法:interval 得到的是一个时间间隔,是一种数据类型,可以直接与日期进行计算;
eg> select sysdate - (interval '1' year) from dual; (当前时间的前一年)
1,Interval '11' year(n)
-- 输出结果为:+11-00 (表示11年0个月)
n为年的精度,默认值为2,'integer' 中的integer位数不能大于n
2,interval '20' month(n)
-- 输出结果为:+01-08(1年8个月)
n仍为年的精度,integer的值不能使输出结果溢出(如:n=2输出结果最大值为:+99-11,所以integer值不能大于1199(=99*12+11) )
3,interval '99-11' year(n) to month
-- 输出结果为:+99-11
此处的格式必须是‘integer-integer’
4,interval '99' day(n)
-- 输出结果为:+99 00:00:00(99天0小时)
n为天的精度,默认值为2
5,interval '90000' second(n)
-- 输出结果为:+01 01:00:00.000000(1天零1小时)
n为秒的精度(小数点后的位数),默认值为6
6,interval '2 1:03:1' day(1) to second(3)
-- 输出结果为:+2 01:03:01.000
同类型的函数:NUMTODSINTERVAL/NUMTOYMINTERVAL
1,NUMTODSINTERVAL(n, 'interval_unit')
将n转换成interval_unit所指定的值, interval_unit可以为: DAY, HOUR, MINUTE, SECOND
注意该函数不可以转换成YEAR和MONTH的.
eg> select numtodsinterval(100, 'HOUR') from dual;
-- 结果为:+000000004 04:00:00.000000000
2,NUMTOYMINTERVAL(n, 'interval_unit')
将n转换成interval_unit所指定的值,interval_unit可以为: YEAR, MONTH
eg> select numtoyminterval(100, 'MONTH') from dual;
-- 结果为:+000000008-04