You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将秒数转换为含总小时数的时间格式问题求助

解决SQL Server中秒数转含总小时数的时间格式问题

你遇到的问题根源在于:DATEADD(ss, 秒数, 0)会将秒数累加到1900-01-01 00:00:00这个基准时间上,当秒数超过24小时(86400秒)时,日期会自动进位;而CONVERT(..., 108)格式只会提取当天的时分秒,导致大秒数被截断为当日小时数,出现数值越大时间戳越短的错误。

要得到包含总小时数的格式(如40:23:56),需要手动拆分秒数为总小时、分钟、秒,再拼接成目标字符串。

直接计算的SQL示例

SELECT 
    CONCAT(
        FLOOR(147588 / 3600), ':',
        RIGHT('0' + CAST(FLOOR((147588 % 3600)/60) AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(147588 % 60 AS VARCHAR), 2)
    ) AS 时长
UNION ALL
SELECT 
    CONCAT(
        FLOOR(63297 / 3600), ':',
        RIGHT('0' + CAST(FLOOR((63297 % 3600)/60) AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(63297 % 60 AS VARCHAR), 2)
    )
UNION ALL
SELECT 
    CONCAT(
        FLOOR(67232 / 3600), ':',
        RIGHT('0' + CAST(FLOOR((67232 % 3600)/60) AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(67232 % 60 AS VARCHAR), 2)
    )
UNION ALL
SELECT 
    CONCAT(
        FLOOR(97230 / 3600), ':',
        RIGHT('0' + CAST(FLOOR((97230 % 3600)/60) AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(97230 % 60 AS VARCHAR), 2)
    )

执行后正确输出:

40:59:48
17:34:57
18:40:32
27:00:30

封装成函数复用

如果需要多次使用该转换逻辑,可以创建自定义函数:

CREATE FUNCTION dbo.SecondsToTotalHoursFormat(@seconds INT)
RETURNS VARCHAR(20)
AS
BEGIN
    RETURN CONCAT(
        FLOOR(@seconds / 3600), ':',
        RIGHT('0' + CAST(FLOOR((@seconds % 3600)/60) AS VARCHAR), 2), ':',
        RIGHT('0' + CAST(@seconds % 60 AS VARCHAR), 2)
    )
END

使用函数的示例:

SELECT dbo.SecondsToTotalHoursFormat(147588) AS 时长
UNION ALL
SELECT dbo.SecondsToTotalHoursFormat(63297)
UNION ALL
SELECT dbo.SecondsToTotalHoursFormat(67232)
UNION ALL
SELECT dbo.SecondsToTotalHoursFormat(97230)

内容的提问来源于stack exchange,提问作者Lorenzo Santarelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:25:04