2014-02-18 78 views
1

我想要減去事件的結束事件,並獲取時間差。我開始嘗試:減去兩個日期得到hh:mm:ss

TO_CHAR(WXN_MOPACTIVITY.MOPEND, 'YYYY-MM-DD HH24:MI:SS') - TO_CHAR(WXN_MOPACTIVITY.MOPSTART, 'YYYY-MM-DD HH24:MI:SS') AS TIME_DIF 

但是,這是行不通的。我然後嘗試:

(WXN_MOPACTIVITY.MOPEND - WXN_MOPACTIVITY.MOPSTART) AS TIME_DIF 

這給了我像0.125的答案。如何減去這些日期字段並以hh:mm:ss格式結束?

回答

1

假設mopendmopstart都是date列,則減去兩個日期會返回一個以天爲單位的差異。如果你想將其格式化爲小時,分鐘和秒,你需要做一些數學。

with diffs as (
    select 0.125 diff_in_days from dual 
) 
select trunc(mod(diff_in_days * 24, 24)) diff_in_hours, 
     trunc(mod(diff_in_days * 24 * 60, 60)) diff_in_mins, 
     trunc(mod(diff_in_days * 24 * 60 * 60, 60)) diff_in_secs 
    from diffs; 

另一種方法是使用一個interval並提取各個部件

with diffs as (
    select numtodsinterval(0.125, 'day') diff_interval from dual 
) 
select extract(hour from diff_interval) diff_in_hours, 
     extract(minute from diff_interval) diff_in_mins, 
     extract(second from diff_interval) diff_in_secs 
    from diffs; 
-3

您可以嘗試

TO_DATE((WXN_MOPACTIVITY.MOPEND - WXN_MOPACTIVITY.MOPSTART), 
     'YYYY-MM-DD HH24:MI:SS') AS TIME_DIF 

這應該工作。 (我現在沒有任何oracle數據庫)

+0

減去兩個日期返回'number'。您無法使用該格式將「號碼」轉換爲日期。 –

+0

對。但正如我所說 - 現在沒有數據庫。無論如何 - to_char應該工作。明天將嘗試,只是爲了糾正答案。 –

+0

當然,你可以給'to_char'一個數字。但沒有日期格式掩碼。您可以將數字0.125轉換爲字符串'0.125'。但'to_char'不知道0.125是以天爲單位,或者如何將天轉換爲'hh24:mi:ss'格式。 –