2012-11-09 46 views
2

之間的時間間隔輸出格式我已經在SQL查詢如下:改變兩個小時

SELECT 
    TO_CHAR(Event1, 'HH24:MI:SS'), 
    TO_CHAR(Event2, 'HH24:MI:SS'), 
    TO_CHAR((Event1-Event2) * -1440) AS Elapsed 
... 

這給了我兩個小時,在此事件1和事件2發生在幾分鐘之間的時間間隔。

我的問題:我如何強制執行所顯示的時間不是以分鐘爲單位,而是採用以下格式HH24:MI:SS

+1

我相信你正在使用來自'to_char'函數的Oracle。使用您正在使用的數據庫引擎標記所有問題是一個好主意。 –

+0

對不起,這是一個Oracle數據庫。 – anton4o

+0

事件1和事件2是日期類型嗎? – Marc

回答

1

你可以轉換爲TIMESTAMP這導致間隔數據類型

SQL> create table test(a date, b date); 

Table created. 

SQL> insert into test values (sysdate - 1.029384, sysdate); 

1 row created. 

SQL> select 1440*(b-a) diff_in_secs from test; 

DIFF_IN_SECS 
------------ 
    1482.31667 

SQL> select (cast(b as timestamp)-cast(a as timestamp)) diff_in_secs from test; 

DIFF_IN_SECS 
--------------------------------------------------------------------------- 
+000000001 00:42:19.000000 

你可以用extract('hour' from your_interval_expression)

SQL> select extract(day from diff)||'d '||extract(hour from diff)||'h '||extract(minute from diff)||'m '||extract(second from diff)||'s' from (select (cast(b as timestamp)-cast 
(a as timestamp)) diff from test); 

EXTRACT(DAYFROMDIFF)||'D'||EX 
-------------------------------------------------------------------------------- 
1d 0h 42m 19s 
+0

您也可以使用'numtodsinterval(b - a,'DAY')'得到一個'INTERVAL '表示。 –

+0

是的,你也可以這樣做。 – DazzaL

+0

numtodsinterval(event2 - event1,'DAY')很好,但我現在得到的結果是:0 2:29:59.9999999 任何想法如何擺脫領先0(猜它意味着0天已過) ,因爲我真的不需要這個,以及如何將秒數整理成一個整數? – anton4o

1

提取單個元素嘗試

select 
TRUNC(event1-event2)||':'|| 
TRUNC(MOD(event1-event2),1)*24)||':'|| 
TRUNC(MOD(MOD(event1-event2),1)*24,1)*60)||':'|| 
TRUNC(MOD(MOD(MOD((event1-event2),1)*24,1)*60,1)*60) as elapsed