眾所周知,Oracle的時間可以直接用來加減操作,比如
select sysdate, sysdate - 2 from dual"SYSDATE" "SYSDATE-2"
-----------------------------------
"19-5月 -09" "17-5月 -09"
很明顯,sysdate - 2表示的日期-2,也就是2天前的時間,2天後的時間+2就可以了。
但是,有的時候我們不需要2天前或者2天後這麼長的時間,我們需要2小時前,或者2分鐘前的時間。
但是並沒有發現Oracle有關於小時或者分鐘直接操作的函數,本人也非常納悶。
後來查找資料和朋友們的幫助,才知道日期用於加減操作的時候是一個浮點數,於是做了2個實驗。
實驗1:
select to_char(sysdate, 'yyyy-MM-dd hh24:mi:ss') cur_time,
to_char(sysdate - 2 / 24, 'yyyy-MM-dd hh24:mi:ss') time_before_2_hour
from dual;"CUR_TIME" "TIME_BEFORE_2_HOUR"
-------------------------------------------------------------------
"2009-05-19 09:21:58" "2009-05-19 07:21:58"
實驗2:
select to_char(sysdate, 'yyyy-MM-dd hh24:mi:ss') cur_time,
to_char(sysdate - 2 / (24 * 60), 'yyyy-MM-dd hh24:mi:ss') time_before_2_minutes
from dual;"CUR_TIME" "TIME_BEFORE_2_MINUTES"
---------------------------------------------------------------------
"2009-05-19 09:24:18" "2009-05-19 09:22:18"
結果顯示比較明顯了,2小時前就是2/24天,2分鐘就是2/(24*60)天,Oracle日期的加減還是day上的加減,不過他是一個浮點數,所以轉換成日期之後實際上就是時間上的加減。