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