2016-07-28 16 views
0

In Oracle SQL I 4 Spalten zusammengeschlossen habe (ex von Spaltennamen: a_d, a_t, d_d, d_t) in 2 Spalten (ex Namen: a_d_t und d_d_t), das jeweils das Formats sind : YYYY-MMM-DD HH24:MI. Ich versuche herauszufinden, wie viel Zeit (Tage und Stunden) für jede Beobachtung zwischen a_d_t (die Startzeit) und d_d_t (die Endzeit) verstrichen ist.Datum und Zeitverschiebung in Oracle SQL

Ich habe versucht d_d_t - a_d_t und to_date(d_d_t)-to_date(a_d_t), aber ich habe für jedes folgende zurück: invalid identifier.


den Code als Referenz, die ich verwendet (was gearbeitet), die Spalten zu fusionieren ist:

to_char(to_date 
(to_char (a_d,'YYYYMMDD') 
    || a_t, 
'YYYYMMDDHH24MI' 
    ), 'YYYY-MM-DD HH24:MI') 
+0

Ich denke, sie sind Datum, der Code, den ich verwendet habe, um die zwei zusammengeführten Spalten zu erstellen, ist oben. –

+0

Sie müssen genauer sein - wenn Sie in dem Code getan haben, was Sie in der Post getan haben, kein Wunder, dass es nicht funktioniert. In der Post sagten Sie, Sie hätten die Spaltennamen a_d, a_t, aber im Code haben Sie a_dt und a_time_text. Wenn das, was Sie sagen, meistens wahr ist, dann sind d_d_t und a_d_t bereits Daten, d_d_t - a_d_t sollte funktionieren, es würde nicht "ungültiger Bezeichner" zurückgegeben. Das ist der richtige Weg, den Zeitunterschied (in Tagen) zu finden. – mathguy

+0

@mathguy bearbeitet Code oben, um besser zu entsprechen, was ich tat. –

Antwort

0

Ihre Eingaben Strings sind, so dass Sie sie zu Daten konvertieren. Aber es reicht nicht, to_date zu sagen, Sie müssen auch richtige Formatmodelle angeben.

select to_date(d_d_t, 'yyyy-mm-dd hh24:mi') - to_date(a_d_t, 'yyyy-mm-dd hh24:mi') 
from <...> 

wird Ihnen den Unterschied in Tagen geben. Multiplizieren Sie mit 24, Sie erhalten es in Stunden.

+0

K Ich habe versucht, dass in der gleichen Abfrage, die ich die "a_d_t" und "d_d_t" in erstellen, aber sie nicht als Bezeichner erkennt. Was muss ich tun, um das zu beheben? –

+0

Schreiben Sie eine Abfrage und versuchen Sie, d_d_t, a_d_t und ihre Differenz gleichzeitig zu erhalten? Oder brauchst du nur den Unterschied? Natürlich erhalten Sie "Ungültige Kennung", wenn Sie versuchen, die Aliase in der gleichen Abfrage zu verwenden, wo Sie sie zum ersten Mal erstellen, das ist nicht möglich. – mathguy

0

In Anbetracht Ihrer Eingaben d_d_t, a_dare Zeichenfolge im Format JJJJ-MM-TT hh: mi und nls_date_format unterscheidet sich davon, können Sie versuchen, folgende Abfrage verwenden und sehen, ob es funktioniert.

Um die Dauer zwischen zwei Datumsangaben zu finden, müssen Sie Ihre Datumszeichenfolge in das Datumsformat konvertieren.

select col_a, col_b, to_date(col_a,'yyyy-mm-dd hh24:mi:ss')- to_date(col_b,'yyyy-mm-dd hh24:mi:ss')duration 
from x_datedur 

ersetzen col_a mit der Zeit endet, col_b mit der Zeit und x_datedur mit Ihrem Tabellennamen beginnen.

+0

Ich habe das schon ausprobiert, es funktioniert nicht –