2016-07-16 16 views
0

ich ein kleines Problem mit der Umwandlung von Sekunden bis Stunden in Teradata habe ..Teradata Umwandlung von Sekunden bis Stunden

CAST((TRUNC(seconds/3600) (FORMAT '99')) AS VARCHAR(10)) ||':'|| 
CAST((TRUNC((seconds MOD 3600)/60) (FORMAT '99')) AS VARCHAR(10)) ||':'|| 
CAST((TRUNC(seconds MOD 60) (FORMAT '99')) AS VARCHAR(10)) AS SecToHours 

Ich brauche Sekunden bis Minuten und Stunden im Format 00.00.00 zu konvertieren, aber jetzt, wenn ich mehr als 100 Stunden anstelle von 100 Stunden habe, um das Ergebnis zu bekommen ** Ich will kein Format von '999'.

Awaited Ergebnisse:

Stunden: Minuten: Sekunden

00:00:59

00:59:59

09:59:59

99:59 : 59

100: 59: 59

Ist es eine Möglichkeit?

Antwort

4

Ändern Sie einfach das FORMAT mit optionalen Ziffern.

Dies ist eine vereinfachte Version, wenn seconds kein DECIMAL ist, könnte man die TRUNC auch entfernen:

(TRUNC(seconds/3600)   (FORMAT 'ZZ99')) || 
(TRUNC((seconds MOD 3600)/60) (FORMAT ':99')) || 
(TRUNC(seconds MOD 60)  (FORMAT ':99')) AS SecToHours 

Oder ein Intervall (wenn weniger als 10000 Stunden) verwenden:

seconds * INTERVAL '0000:00:01' HOUR TO SECOND 
+0

dank viel, zwei Verkettung weniger cool :) – MartinusP

0

Das Problem ist der Stundenanteil. Eine case Anweisung kann das Problem lösen:

(CASE WHEN seconds < 3600*10 THEN CAST((TRUNC(seconds/3600) (FORMAT '99')) AS VARCHAR(10)) 
     ELSE CAST(TRUNC(seconds/3600) AS VARCHAR(10)) 
END) ||':'|| 
. . . 
Verwandte Themen