Oracle獲取時間間隔以及轉換為時分秒格式

2021-08-20 11:31:59 字數 3266 閱讀 3046

1、獲取2個輸入時間的時間間隔

兩個date型別字段:start_date,end_date,計算這兩個日期的時間差(分別以天,小時,分鐘,秒,毫秒):

天:round(to_number(end_date - start_date))

小時:round(to_number(end_date - start_date) * 24)

分鐘:round(to_number(end_date - start_date) * 24 * 60)

秒:round(to_number(end_date - start_date) * 24 * 60 * 60)

毫秒:round(to_number(end_date - start_date) * 24 * 60 * 60 * 1000)

示例:

select

round(to_number(to_date('2012-02-20 17:45:04','yyyy-mm-dd hh24:mi:ss')-to_date('2012-02-19 08:34:04','yyyy-mm-dd hh24:mi:ss')),2) as day

from dual;--天

select

round(to_number(to_date('2012-02-20 17:45:04','yyyy-mm-dd hh24:mi:ss')-to_date('2012-02-19 08:34:04','yyyy-mm-dd hh24:mi:ss'))*24,2) as hour

from dual;--小時

2、利用extract函式將時間間隔轉換成格式

//oracle中extract()函式從oracle 9i中引入,用於從乙個date或者interval型別中擷取到特定的部分   

//語法如下:   

extract (   

|    

|    

from )   

//我們只可以從乙個date型別中擷取 year,month,day(date日期的格式為yyyy-mm-dd);  

獲取日期中的擷取值:

select extract(day from date'2011-05-17') day from dual;
時間間隔通過to_timestamp()相減後的值包含時分秒,例如 dt2-dt1=+000000102 04:01:46.000000000,因此,to_timestamp()轉換的時間可以擷取使用

select extract(day from dt2-dt1) day  

,extract(hour from dt2-dt1) hour

,extract(minute from dt2-dt1) minute

,extract(second from dt2-dt1) second

from (

select to_timestamp('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1

,to_timestamp('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2

from dual)

時間間隔通過to_date()相減後的值不包含時分秒,是包含小數的天值,例如 dt2-dt1=102.167893518519天,to_date()轉換的時間需要將day轉換為second才能被extract識別,如下:

select 

(extract(day from (to_date('2012-03-30 00:00:00','yyyy-mm-dd hh24:mi:ss')-to_timestamp('2012-03-29 00:00:00','yyyy-mm-dd hh24:mi:ss')) day to second )

|| '天'

||extract(hour from (to_date('2012-03-30 00:00:00','yyyy-mm-dd hh24:mi:ss')-to_date('2012-03-29 00:00:00','yyyy-mm-dd hh24:mi:ss')) day to second )

|| '時'

|| extract(minute from (to_date('2012-03-30 23:23:15','yyyy-mm-dd hh24:mi:ss')-to_date('2012-03-29 00:23:00','yyyy-mm-dd hh24:mi:ss')) day to second )

|| '分'

|| extract(second from (to_date('2012-03-30 23:23:15','yyyy-mm-dd hh24:mi:ss')-to_date('2012-03-29 00:23:00','yyyy-mm-dd hh24:mi:ss')) day to second )

|| '秒') as timespan_

from dual;

3、利用numtodsinterval()方法,該方法只轉換成時分秒,如果溢位,則重新開始。

示例:將123.13小時轉換成時分秒格式,結果:

03:07:48

select substr(numtodsinterval(123.13,'hour'),12,8) from dual;

4、如果確定時間間隔在一天之內,可以使用如下方式,將不到一天的時間間隔*86400轉換成秒,再將秒數利用to_date('','sssss')換算成當天的時間,換算完成後的具體時間即是要求的時間間隔的時分秒格式資料。

select to_date(0,'sssss') from dual;--2018/6/1,當天0時0分0秒

select to_date(1,'sssss') from dual;--2018/6/1 0:00:01,當天0時0分1秒

select to_date(86399,'sssss') from dual;--2018/6/1 23:59:59,當天23時59分59秒

select 

to_char(to_date(trunc((to_date('2012-11-1 23:59:59','yyyy-mm-dd hh24:mi:ss')-to_date('2012-11-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) *86400),'sssss'),'fmhh24"小時"mi"分鐘"ss"秒"' )

from dual

ORACLE 計算時間相減間隔

在oralce中我發現有add months函式,加天數n可以用如下方法實現,select sysdate n from dual 在oralce中我發現有add months函式,加天數n可以用如下方法實現,select sysdate n from dual sysdate 1 加一天 sysd...

獲取時間間隔 不受系統時間影響

windows平台下 include dword dwtimecout1 gettickcount 作業系統啟動到現在持續的毫秒數 sleep 10000 在sleep的這十秒內如果修改系統時間,不影響時間間隔 dword dwtimecout2 gettickcount int ninterval...

python 獲取時間間隔時間戳日期

在現實專案中經常會用到時間戳輪,因為有時候資料是按小時儲存,按小時取出某一天的資料,因此需要輪詢去取時間 在python中 可以這樣 begintime int time.mktime time.strptime 20181023 y m d endtime begintime 86400 for ...