Differenz zweier Datetime-Felder in Stunden bei Sommer-/Winterzeit

woltho

Neuer Benutzer
Beiträge
4
Hallo

Ich bin schon seit gestern auf der Suche und habe noch keine Lösung für mein Problem gefunden.

Und zwar habe ich 2 Datetime Felder von denen ich die Differenz ermittle. Das funktioniert soweit auch ganz gut mit:

select (Datetime2 - Datetime1)*24 as diff from table

Wenn jetzt zwischen den beiden Daten aber die Sommer- bzw- Winterzeitumstellung ist, bekomme ich einen falschen Wert zurück.

So z.b. ergibt (27-10-2013 06:00:00 - 26-10-2013 22:0:00) *24 = 8 Stunden.

Richtig wären aber 9 Stunden. Ich bin kein Oracleprofi und hoffe daher auf eure Hilfe.


Gruß Thomas
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
Hallo

Ich bin schon seit gestern auf der Suche und habe noch keine Lösung für mein Problem gefunden.

Und zwar habe ich 2 Datetime Felder von denen ich die Differenz ermittle. Das funktioniert soweit auch ganz gut mit:

select (Datetime2 - Datetime1)*24 as diff from table

Wenn jetzt zwischen den beiden Daten aber die Sommer- bzw- Winterzeitumstellung ist, bekomme ich einen falschen Wert zurück.

So z.b. ergibt (27-10-2013 06:00:00 - 26-10-2013 22:0:00) *24 = 8 Stunden.

Richtig wären aber 9 Stunden. Ich bin kein Oracleprofi und hoffe daher auf eure Hilfe.


Gruß Thomas


Wenn Du die Information über die zeitzone in den Skat drückst ist das normal. Mit Zeitzone geht es korrekt:

Code:
test=*> select  '27-10-2013 06:00:00'::timestamptz - '26-10-2013 22:0:00'::timestamptz;
 ?column?
----------
 09:00:00
(1 row)

ich nutze PostgreSQL, sollte aber in Oraggle ähnlich/gleich funktionieren.
 

woltho

Neuer Benutzer
Beiträge
4
Super. Jetzt bin ich auf jeden Fall mal ein Stück weiter.

Bekomme jetzt die richtige Differenz aber leider im falschen Format. Die Ausgabe sieht jetzt so aus:

0 9:0:0.0

Ich brauch das Ergebnis als Fließkommazahl. Hast du da noch nen Tip für mich?
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Super. Jetzt bin ich auf jeden Fall mal ein Stück weiter.

Bekomme jetzt die richtige Differenz aber leider im falschen Format. Die Ausgabe sieht jetzt so aus:

0 9:0:0.0

Ich brauch das Ergebnis als Fließkommazahl. Hast du da noch nen Tip für mich?

Was brauchst Du? Die Anzahl der Sekunden?

Code:
test=*> select  extract(epoch from '27-10-2013 06:00:00'::timestamptz - '26-10-2013 22:0:00'::timestamptz);
 date_part
-----------
  32400
(1 row)
 

woltho

Neuer Benutzer
Beiträge
4
Ich brauch die Anzahl in Minuten. Leider gibt extract nur die Stunden oder Minuten zurück so das bei 8,5 Stunden entweder 8h oder 30 Minuten ausgegeben werden. Die Funktion epoch gibt es bei Oracle nicht.
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Ich brauch die Anzahl in Minuten. Leider gibt extract nur die Stunden oder Minuten zurück so das bei 8,5 Stunden entweder 8h oder 30 Minuten ausgegeben werden. Die Funktion epoch gibt es bei Oracle nicht.


Nun, eine Stunde hat üblicherweise ja 60 Minuten, also 8*60 + 30. Muß man halt sich ausrechnen. EPOCH gibt ja die Sekunden seit begin der Zeitrechnung zurück, ist hier halt praktisch. (die 9 Stunden werden als 9 Stunden nach 1.1.1970 interpretiert). Das ist möglicherweise eine der ( vielen praktischen) Erweiterungen von PG.
 
Werbung:

woltho

Neuer Benutzer
Beiträge
4
Ja, ohne rechnen komm ich hier nicht weiter. Ich extrahiere jetzt die Stunden und addiere die Minuten geteilt duch 60 hinzu und dann passt es. Schade das es keine elegantere Lösung von Oracle dafür gibt.
Es gibt ja die Funktion months_between, warum dann nicht auch für Tage, Stunden usw.
Aber egal. danke für deine Hilfe. So komm ich jedenfalls erstmal weiter.
 
Oben