簡體   English   中英

oracle的時差

[英]Time difference in oracle

嗨我有下表,其中包含開始時間,結束時間,總時間


STARTTIME            | ENDTIME             | TOTAL TIME TAKEN  |
02-12-2013 01:24:00  | 02-12-2013 04:17:00 |  02:53:00         |

我需要使用oracle中的更新查詢更新上面的TOTAL TIME TAKEN字段

為此,我嘗試了以下選擇查詢

select  round((endtime-starttime) * 60 * 24,2),
        endtime,
        starttime 
  from purge_archive_status_log

但是我得到了02.53 ,但是我的期望格式是02:53:00請讓我知道我該怎么做?

根本沒有理由在表中包含total_time_taken列,您可以隨時計算它的值。 但是如果你堅持保留它,那么最好將它重新創建為interval day to second數據類型的列,而不是varchar2 (假設它是當前的數據類型)。 所以這里有兩個查詢供您選擇,一個返回interval day to secondinterval day to second數據類型,另一個值為varchar2數據類型:

此查詢返回兩個日期之間的差異,作為interval day to second數據類型的值:

SQL> with t1(starttime, endtime, total_time_taken ) as(
  2    select to_date('02-12-2013 01:24:00', 'dd/mm/yyyy hh24:mi:ss')
  3         , to_date('02-12-2013 04:17:00', 'dd/mm/yyyy hh24:mi:ss')
  4         , '02:53:00'
  5     from dual
  6  )
  7  select starttime
  8       , endtime
  9       , (endtime - starttime) day(0) to second(0) as total_time_taken
 10   from t1
 11  ;

結果:

STARTTIME            ENDTIME               TOTAL_TIME_TAKEN  
-----------          -----------          ---------------- 
02-12-2013 01:24:00  02-12-2013 04:17:00   +0 02:53:00        

此查詢返回兩個日期之間的差異,作為varchar2數據類型的值:

SQL> with t1(starttime, endtime, total_time_taken ) as(
  2    select to_date('02-12-2013 01:24:00', 'dd/mm/yyyy hh24:mi:ss')
  3         , to_date('02-12-2013 04:17:00', 'dd/mm/yyyy hh24:mi:ss')
  4         , '02:53:00'
  5     from dual
  6  )
  7  select starttime
  8       , endtime
  9       , to_char(extract(hour   from res), 'fm00')  || ':' ||
 10         to_char(extract(minute from res), 'fm00')  || ':' ||
 11         to_char(extract(second from res), 'fm00') as total_time_taken
 12    from(select starttime
 13              , endtime
 14              , total_time_taken
 15              , (endtime - starttime) day(0) to second(0) as res
 16          from t1
 17        )
 18  ;

結果:

STARTTIME            ENDTIME              TOTAL_TIME_TAKEN  
-----------          -----------          ---------------- 
02-12-2013 01:24:00  02-12-2013 04:17:00   02:53:00 

試試這個,

WITH TIME AS (
SELECT to_date('02-12-2013 01:24:00', 'dd-mm-yyyy hh24:mi:ss') starttime, 
       to_date('02-12-2013 04:17:00', 'dd-mm-yyyy hh24:mi:ss') endTime
FROM dual)
SELECT to_char(TRUNC ((endTime - startTime)* 86400 / (60 * 60)), 'fm09')||':'||
       to_char(TRUNC (MOD ((endTime - startTime)* 86400, (60*60)) / 60), 'fm09')||':'||
       to_char(MOD((endTime - startTime)* 86400, 60), 'fm09') time_diff
FROM   TIME;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM