Laufzeiten umrechnen, Sekundenangaben lesbar darstellen

Hintergrund:
Laufzeiten von diversen Prozessen werden (Tool-)intern in Sekunden gemessen und meist auch so dargestellt.

Für Weiterberechnungen und Auswertungen ist das Ideal. Der Lesbarkeit für den geneigten Nutzer nur bedingt dienlich. Wer erkennt schon auf den ersten Blick, wie lange 14.738sec sind? Lang halt.

Lösungsansätze:
Für die Lesbarkeit, kann man diese Werte natürlich entsprechend umrechnen.
Aber wie?
14.738sec vermutlich am Besten in Stunden: 14.738/60/60 = 4,0939 Stunden -> Aha.

Aber was ist mit 249sec? 249/60/60 = 0,069 Stunden - Wie lang bitte sind 0,069Std?
249sec also besser in Minuten umrechnen: 249/60 = 4,15 Min -> schon besser

Also per CASE-Statement die unterschiedliche großen Sekundenangaben passend umrechnen? Nicht schön und umständlich.

Netterweise bietet Oracle mit der to_date()-Funktion auch den Formatstring 'sssss' (5x kleines 's').
Per to_char(to_date(14768,'sssss'),'HH24:MI:SS') werden aus den Sekunden ein "Datum", dass dann wie bekannt formatiert werden kann.

Als SQL:
select 
14738 Dauer1, 
to_char(to_date(14768,'sssss'),'HH24:MI:SS') Dauer1_lesbar,
249 Dauer2, 
to_char(to_date(249,'sssss'),'HH24:MI:SS') Dauer2_lesbar
from dual;

    DAUER1 DAUER1_LESBAR     DAUER2 DAUER2_LESBAR
---------- ------------- ---------- -------------

     14738 04:06:08             249 00:04:09     


Ein eleganter Weg für kurze und lange Laufzeiten.

Einschränkung: Dies klappt bei Laufzeiten von unter 24 Stunden. Bei Sekundenangaben über 86399 (= 24h) gibt es ORA-01853.

Lösung für Laufzeiten über 24 Stunden:
select floor(1086401/86400)||'d '|| to_char(to_date(mod(1086401,86400),'sssss'),'hh24:mi:ss') "D HH:MM:SS" from dual;

D HH:MM:SS
------------
12d 13:46:41

...zeigt dann immer auch die Tage an.

Kommentare

  1. Klasse! Danke, die Lösung über mehr als 24 Stunden hat mir gefehlt :-)

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

trunc(sysdate) - nette Spiele mit dem Datum

Zufallszahlen und -text generieren - DBMS_RANDOM