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

如何将SQL查询返回的总秒数转换为HH:MM:SS格式?

将总秒数转换为HH:MM:SS格式的SQL解决方案

嘿,这个需求太常见啦!针对你提供的查询返回的总秒数(最大86400秒),我给你两种靠谱的SQL实现方式,适配你用的SQL Server语法(从你的CONVERT(date, ...)能看出来):


方法1:利用DATEADD和FORMAT函数(简洁直观)

这种方法的思路是把总秒数加到「0点」这个基准时间上,然后直接格式化出时分秒部分,代码非常简洁:

SELECT 
  -- 把秒数转为时间后格式化,HH:mm:ss确保两位数字的时分秒
  FORMAT(
    DATEADD(second, 
      (SELECT FIRST TSS.TotalDrivingTime 
       FROM HLG01_TR_TachographShiftSummary TSS 
       WHERE TSS.DriverID = TRD.DriverID 
         AND CONVERT(date, TSS.PeriodStart) = S.LoadDate), 
      0 -- 基准时间:1900-01-01 00:00:00
    ), 
    'HH:mm:ss'
  ) AS FormattedDrivingTime
-- 记得替换这里的YourMainTable为你的主表(因为原查询用到了TRD和S表)
FROM YourMainTable

小提醒:如果总秒数刚好是86400(24小时),这种方法会输出00:00:00,适合业务上把24小时视为次日零点的场景。


方法2:手动数学拆分(兼容性更强,精准显示24小时)

如果你的SQL Server版本较旧(比如2012之前不支持FORMAT),或者需要精准显示24:00:00来代表完整一天,可以用数学计算拆分小时、分钟、秒,再拼接成格式字符串:

SELECT 
  CONCAT(
    -- 补零确保小时是两位
    RIGHT('00' + CAST(seconds_total / 3600 AS VARCHAR), 2), ':',
    -- 计算剩余秒数后转分钟,补零
    RIGHT('00' + CAST((seconds_total % 3600) / 60 AS VARCHAR), 2), ':',
    -- 最后剩余的秒数,补零
    RIGHT('00' + CAST(seconds_total % 60 AS VARCHAR), 2)
  ) AS FormattedDrivingTime
FROM (
  -- 先把原查询的秒数结果作为子查询提取,方便后续计算
  SELECT 
    ISNULL(
      (SELECT FIRST TSS.TotalDrivingTime 
       FROM HLG01_TR_TachographShiftSummary TSS 
       WHERE TSS.DriverID = TRD.DriverID 
         AND CONVERT(date, TSS.PeriodStart) = S.LoadDate),
      0 -- 如果查询返回NULL,默认转为0秒(00:00:00)
    ) AS seconds_total
  FROM YourMainTable -- 替换为你的主表
) AS sub_query

额外注意点

  • 如果TotalDrivingTime可能返回NULL,记得用ISNULL或COALESCE处理,避免最终结果出现NULL;
  • 两种方法都能完美覆盖0到86400秒的范围,按需选择即可。

内容的提问来源于stack exchange,提问作者John Mitchell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:22:31