在工作中我碰到這樣一個問題session表需要用到timestamp的字段在進行timestamp字段更新時出現了為題比如需要對session的有效期增加小時
采用 systimestamp + / 會丟失秒後的精度感覺增加之後就變成了date型的樣子經過研究發現oracle 有個函數叫NUMTODSINTERVAL 可以解決這個問題下面兩個例子說明如何使用這個函數
增加一小時
SELECT to_char(systimestamp + NUMTODSINTERVAL(hour)yyyymmdd HH:mi:ss:ff) to_char(systimestampyyyymmdd HH:mi:ss:ff) FROM dual;
增加一分鐘
SELECT to_char(systimestamp + NUMTODSINTERVAL(minut)yyyymmdd HH:mi:ss:ff) to_char(systimestampyyyymmdd HH:mi:ss:ff) FROM dual;
對numtodesignterval的原版解釋如下
NUMTODSINTERVAL converts n to an INTERVAL DAY TO SECOND literal The argument n can be any NUMBER value or an expression that can be implicitly converted to a NUMBER value The argument interval_unit can be of CHAR VARCHAR NCHAR or NVARCHAR datatype The value for interval_unit specifies the unit of n and must resolve to one of the following string values:
DAY
HOUR
MINUTE
SECOND
從解釋上看NUMTODSINTERVAL函數還可以處理day和sesond的值增加(處理值減少只要添加在數字前就可以啦)真是很強大的函數另外如果需要增加的是年或者月要選擇NUMTOYMINTERVAL 函數了
From:http://tw.wingwit.com/Article/program/Oracle/201311/17416.html