2012-12-25 14 views

回答

4

如果日期是區別僅僅在於時間的一部分,你可以使用第二間隔一天。例如:

SQL> select (to_date('25.12.12 15:37:32', 'DD.MM.YY HH24:MI:SS') 
    2  - to_date('25.12.12 12:45:45', 'DD.MM.YY HH24:MI:SS')) day(0) to second(0) as Time 
    3 from dual 
    4 ; 

TIME 
------------- 
+0 02:51:47 

但顯然它並不總是如此。所以,你可以寫一個很長的查詢,計算的時間不同的部分,但我想我會用這個簡單的功能去:

SQL> create or replace function DaysToTime(p_val in number) 
    2 return varchar2 
    3 is 
    4 l_hours number; 
    5 l_minutes number; 
    6 l_seconds number; 
    7 begin 
    8 l_Hours := 24 * p_val; 
    9 l_minutes := (l_hours - trunc(l_hours)) * 60; 
10 l_seconds := (l_minutes - trunc(l_minutes)) * 60; 
11 return to_char(trunc(l_hours), 'fm09') ||':'|| 
12   to_char(trunc(l_minutes), 'fm09')||':'|| 
13   to_char(trunc(l_seconds), 'fm09'); 
14 end; 
15/

Function created 

而現在的查詢是:

SQL> select DaysToTime(to_date('25.12.12 15:37:32', 'DD.MM.YY HH24:MI:SS') 
    2  - to_date('25.12.12 12:45:45', 'DD.MM.YY HH24:MI:SS')) as Time 
    3 from dual 
    4 ; 

TIME 
---------- 
02:51:47 
1
select 24 * (EVENT_DATE_B - EVENT_DATE_A) || ':' || '00' 
from your_table 

SQLFiddle demo

+2

'EVENT_DATE_B - EVENT_DATE_A'可能不是整數 – turbanoff

+0

這無益於像'選擇24 *(TO_DATE('25 .12.12 15時37分32' 秒,「 DD.MM.YY HH24:MI:SS') - to_date('25 .12.12 12:45:45','DD.MM.YY HH24:MI:SS'))|| ':'||雙「 – lexeme

4

另一種方法(一個查詢可以在不同的日子):

with tt as (
    select numToDsinterval((EVENT_DATE_B - EVENT_DATE_A), 'DAY') dsint 
    from t) 
select (extract(day from dsint)*24)+extract(hour from dsint) || 
     ':' ||extract(minute from dsint) 
from tt 

Here is a sqlfiddle demo

+0

+1」的「00」當然。由於某種原因,我沒有想過'NumToDSInterval' :) –

1

我認爲你需要找出date1和date2之間的天數,然後從date2中減去這個差值,並將最終日期轉換爲你的格式。複製/粘貼和查看輸出:

Select date2, days_between, to_char(date2-days_between, 'mm-dd-yyyy hh24:mi:ss') end_date 
From 
(
Select sysdate date2 
    , trunc(sysdate)-to_date('20-DEC-2012') days_between --'20-DEC' is start_date 
From dual 
) 
/
相關問題