Is there any tricky way to format seconds like hours:minutes:seconds. For example,
3660
seconds will be displayed as
01h 01m 00s
or
01:01:00
I am aware of the standard way of doing this:
I met the following issues:
I am not able to create separate function that do this.
My code is in view using several CTEs. So, variables can be declare using the CTEs only.
SELECT Seconds,
RIGHT('00'+CONVERT(VARCHAR(10),Seconds/3600),2)
+':'
+ RIGHT('00'+CONVERT(VARCHAR(2),(Seconds%3600)/60),2)
+':'
+ RIGHT('00'+CONVERT(VARCHAR(2),Seconds%60),2) AS [HH:MM:SS]
FROM table1
Result:
Seconds | HH:MM:SS |
---|---|
3660 | 01:01:00 |
3800 | 01:03:20 |
4200 | 01:10:00 |
600 | 00:10:00 |
60 | 00:01:00 |
86400 | 24:00:00 |
86800 | 24:06:40 |
The above query works fine if the total number of hours are less than 100 i.e. (99:59:59). If you need more than that you can use the following query:
SELECT
Seconds,
CASE Seconds/3600
WHEN 0 THEN RIGHT('00'+CONVERT(VARCHAR(10),Seconds/3600),2)
ELSE CONVERT(VARCHAR(10),Seconds/3600) END
+':'
+ RIGHT('00'+CONVERT(VARCHAR(2),(Seconds%3600)/60),2)
+':'
+ RIGHT('00'+CONVERT(VARCHAR(2),Seconds%60),2) AS [HH:MM:SS]
FROM table1
Result:
Seconds | HH:MM:SS |
---|---|
3660 | 1:01:00 |
3800 | 1:03:20 |
4200 | 1:10:00 |
600 | 00:10:00 |
60 | 00:01:00 |
9999930 | 2777:45:30 |
359999 | 99:59:59 |
360000 | 100:00:00 |
86800 | 24:06:40 |