2012-12-25 7 views

Antwort

4

Wenn Termine sind unterscheiden sich nur in der Zeit Teil Sie zweites Intervall Tag verwenden können. Zum Beispiel:

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 

Aber natürlich wird es nicht immer der Fall sein. So könnte man eine lange Abfrage schreiben, um verschiedene Teile von Zeit zu berechnen, aber ich denke, ich mit dieser einfachen Funktion gehen würde:

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 

Und nun die Abfrage wäre:

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' kann nicht eine ganze Zahl – turbanoff

+0

sein, dass etwas nicht gut ist wie' wählen 24 * (to_date ('25 .12.12 15.37.32' , ' DD.MM.YY HH24: MI: SS ') - bis_Datum ('25 .12.12 12:45:45', 'DD.MM.YY HH24: MI: SS')) || ':' || '00' von Dual ' – lexeme

4

Ein anderer Ansatz (eine Abfrage kann an verschiedenen Tagen sein):

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 Natürlich. Aus irgendeinem Grund hatte ich nicht über 'NumToDSInterval' nachgedacht :) –

1

Ich denke, Sie müssen die Anzahl der Tage zwischen Datum1 und Datum2 herausfinden, dann diese Differenz von Datum2 subtrahieren und das Enddatum in Ihr Format umrechnen. Kopieren/Einfügen und sehen Sie die Ausgabe:

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 
) 
/
Verwandte Themen