Leider nicht ... Es gibt jedoch einen einfachen Trick, wenn es weniger als 24 Stunden sein wird.
Oracle geht davon aus, dass eine zu einem Datum hinzugefügte Zahl in Tagen angegeben ist. Konvertiere die Anzahl der Sekunden in Tage. Fügen Sie den aktuellen Tag, dann verwenden Sie die to_date
Funktion nur die Teile Ihrer interessiert sich nehmen Angenommen, Sie haben x
Sekunden.
select to_char(sysdate + (x/(60 * 60 * 24)), 'HH24:MI:SS')
from dual
Das wird nicht funktionieren, wenn es mehr als 24 Stunden ist, wenn Sie die aktuelle entfernen Daten erneut und erhalten Sie den Unterschied in Tagen, Stunden, Minuten und Sekunden.
Wenn Sie etwas wollen: 51:10:05
, d. H. 51 Stunden, 10 Minuten und 5 Sekunden, dann müssen Sie trunc
verwenden.
Wieder einmal davon aus, dass Sie x
Sekunden haben ...
- Die Anzahl der Stunden ist
trunc(x/60/60)
- Die Anzahl der Minuten ist
trunc((x - (trunc(x/60/60) * 60 * 60))/60)
- Die Anzahl der Sekunden ist daher die
x - hours * 60 * 60 - minutes * 60
Lassen Sie sich mit:
with hrs as (
select x, trunc(x/60/60) as h
from dual
)
, mins as (
select x, h, trunc((x - h * 60 * 60)/60) as m
from hrs
)
select h, m, x - (h * 60 * 60) - (m * 60)
from mins
Ich habe eine SQL Fiddle eingerichtet, um zu demonstrieren.
Das funktioniert gut. Aber wenn die Stunden> 99 Stunden dann funktioniert es nicht richtig – user1430989
Siehe meine Bearbeitung mit TO_CHAR anstelle von LPAD. Es sollte jetzt bis zu 9999 Stunden dauern. Wenn Sie mehr als das benötigen, können Sie der Formatzeichenfolge in der ersten TO_CHAR-Funktion zusätzliche 9 hinzufügen. – Mike
Dies wird für den folgenden Fall nicht korrekt angezeigt: SELECT TO_CHAR (TRUNC (76014000/3600), 'FM999999900') || "Stunden" || TO_CHAR (TRUNC (MOD (76014000,3600)/60), 'FM00') || 'Min' VON DUAL; –