Wenn Sie zwei DATE
-Werte wie enddate - startdate
subtrahieren, erhalten Sie die Differenz in Tagen mit Dezimalgenauigkeit, also würde beispielsweise 1,5 1 1/2 Tage oder 36 Stunden bedeuten. Sie können das in HH:MI:SS
mit viel Mathematik umwandeln, aber ein einfacherer Weg ist, den Dezimalwert in einen INTERVAL DAY TO SECOND
-Wert zu konvertieren, indem Sie NUMTODSINTERVAL
Funktion:
Sie würden denken, dass die Funktion TO_CHAR
dies als HH:MI:SS
formatieren könnte, aber so scheint es nicht zu funktionieren. Sie können stattdessen EXTRACT
und TO_CHAR
verwenden, um sicherzustellen, dass Sie führende Nullen erhalten:
Der 00
-Teil des Formatcodes gibt zwei Ziffern an, bei Bedarf eine vorangestellte Null. Der FM
-Teil entfernt den führenden Platz im formatierten Ergebnis, das bei Bedarf für ein negatives Vorzeichen reserviert ist.
Beachten Sie auch, dass Ihre Abfrage Aggregatwerte erhält und sie in derselben SELECT
-Liste verwendet. Oracle lässt dich das nicht tun. Versuchen Sie stattdessen Folgendes:
Die Datumsarithmetik in Oracle ergibt eine Zahl in Tagen. Um also in Stunden zu konvertieren, multiplizieren Sie mit 24 und dann mit trunc
, um eine ganzzahlige Zahl zu erhalten:
Um Minuten zu erhalten, wandeln Sie den Tag-Wert in Minuten und mod()
das mit 60 um:
Konvertieren Sie für Sekunden die Tage wieder in Sekunden und mod()
das mit 60:
Jetzt können Sie diese zusammensetzen, um den benötigten Zeichenfolgenwert zu erhalten.
Tags und Links sql oracle date-arithmetic