2008-10-15 6 views
18

Ich versuche, eine ziemlich schwierige Berichtanforderung von einem Client zu erfüllen, und ich muss herausfinden, um den Unterschied zwischen zwei DateTime-Spalten in Minuten zu erhalten. Ich habe versucht, Trunc und Runde mit verschiedenen formats zu verwenden und kann nicht scheinen, mit einer Kombination zu kommen, die Sinn macht. Gibt es eine elegante Möglichkeit, dies zu tun? Wenn nicht, gibt es irgendeine Weise, dies zu tun?Oracle - Beste SELECT-Anweisung, um den Unterschied in Minuten zwischen zwei DateTime-Spalten zu erhalten?

Antwort

38
SELECT date1 - date2 
    FROM some_table 

gibt einen Unterschied in Tagen. Multiplizieren Sie mit 24, um einen Unterschied in Stunden zu erhalten, und 24 * 60, um Minuten zu erhalten. So

SELECT (date1 - date2) * 24 * 60 difference_in_minutes 
    FROM some_table 

sollte das sein, was Sie suchen

+4

Ich wusste nicht Datum Subtraktion die Anzahl der Tage zurückgegeben. Jetzt weiß ich. – Powerlord

+1

Vergessen Sie nicht, das Ergebnis zu runden! Du willst ROUND ((date1 - date2) * 1440,0) – 37Stars

+0

@Justin Cave Will (date1 - date2) gib difference_in_minutes auch für den selben Tag ?? Wenn ja, warum alle sagen Datum Subtraktion zurückgegeben die Anzahl der Tage? –

9

standardmäßig Oracle-Datum Subtraktion liefert ein Ergebnis in # Tagen.

Also multiplizieren Sie einfach mit 24 um Stunden zu bekommen, und wieder mit 60 für Minuten.

Beispiel:

select 
    round((second_date - first_date) * (60 * 24),2) as time_in_minutes 
from 
    (
    select 
    to_date('01/01/2008 01:30:00 PM','mm/dd/yyyy hh:mi:ss am') as first_date 
    ,to_date('01/06/2008 01:35:00 PM','mm/dd/yyyy HH:MI:SS AM') as second_date 
    from 
    dual 
) test_data 
Verwandte Themen