SQL server, Converting Seconds to Minutes, Hours, Days

后端 未结 5 1283
别那么骄傲
别那么骄傲 2020-12-06 13:20

I have a database column containing an integer value that represents a systems up time in seconds. I\'d really like a query to be able to show me that up time in a easy to r

5条回答
  •  执念已碎
    2020-12-06 14:01

    I tend to use:

    CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' +
        CONVERT(VARCHAR(5), DATEADD(SECOND, Seconds, '19000101'), 8)
    

    The top part just gets your days as an integer, the bottom uses SQL-Server's convert to convert a date into a varchar in the format HH:mm:ss after converting seconds into a date.

    e.g.

    SELECT  Formatted = CAST(FLOOR(seconds / 86400) AS VARCHAR(10))+'d ' +
                            CONVERT(VARCHAR(5), DATEADD(SECOND, Seconds, '19000101'), 8),
            Seconds
    FROM    (   SELECT  TOP 10 
                        Seconds = (ROW_NUMBER() OVER (ORDER BY Object_ID) * 40000)
                FROM    sys.all_Objects
                ORDER BY Object_ID
            ) S
    

    Example on SQL Fiddle

    N.B. Change CONVERT(VARCHAR(5), DATEADD(.. to CONVERT(VARCHAR(8), DATEADD(.. to keep the seconds in the result

    EDIT

    If you don't want seconds and need to round to the nearest minute rather than truncate you can use:

    SELECT  Formatted = CAST(FLOOR(ROUND(Seconds / 60.0, 0) * 60 / 86400) AS VARCHAR(10))+'d ' +
                            CONVERT(VARCHAR(5), DATEADD(SECOND, ROUND(Seconds / 60.0, 0) * 60, '19000101'), 8),
            Seconds
    FROM    (   SELECT  Seconds = 3899
            ) S
    

    I have just replaced each reference to the column seconds with:

    ROUND(Seconds / 60.0, 0) * 60
    

    So before doing the conversion rounding your seconds value to the nearest minute

提交回复
热议问题