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

如何将SQL查询返回的秒数整数值转换为hh:mm:ss时间格式

实现方案

你可以根据你使用的SQL引擎选择对应实现方式,核心逻辑是将计算得到的平均秒数转换为时分秒格式:

MySQL

直接调用内置SEC_TO_TIME函数即可完成转换:

CASE 
    WHEN sum(srv_grp_answd_cnt) = 0 THEN NULL 
    ELSE SEC_TO_TIME(FLOOR(CAST(SUM(srv_grp_answd_dur) AS UNSIGNED) / CAST(sum(srv_grp_answd_cnt) AS UNSIGNED))) 
END AS avg_grp_answd_dur

加FLOOR是为了避免除法得到的小数导致秒数带小数位,不需要可以去掉。

PostgreSQL

通过时间间隔转换配合格式化函数实现:

CASE 
    WHEN sum(srv_grp_answd_cnt) = 0 THEN NULL 
    ELSE TO_CHAR((SUM(srv_grp_answd_dur)::int / sum(srv_grp_answd_cnt)::int) * INTERVAL '1 second', 'HH24:MI:SS')
END AS avg_grp_answd_dur

SQL Server

用日期偏移函数配合格式化实现:

CASE 
    WHEN sum(srv_grp_answd_cnt) = 0 THEN NULL 
    ELSE FORMAT(DATEADD(SECOND, CAST(SUM(srv_grp_answd_dur) AS INT) / CAST(sum(srv_grp_answd_cnt) AS INT), 0), 'HH:mm:ss')
END AS avg_grp_answd_dur

全引擎通用兼容方案

手动计算时分秒后补零拼接,所有SQL引擎都可以套用这个逻辑:

CASE 
    WHEN sum(srv_grp_answd_cnt) = 0 THEN NULL 
    ELSE CONCAT(
        LPAD(CAST(FLOOR((CAST(SUM(srv_grp_answd_dur) AS INT) / CAST(sum(srv_grp_answd_cnt) AS INT)) / 3600) AS STRING), 2, '0'),
        ':',
        LPAD(CAST(FLOOR((CAST(SUM(srv_grp_answd_dur) AS INT) / CAST(sum(srv_grp_answd_cnt) AS INT) % 3600) / 60) AS STRING), 2, '0'),
        ':',
        LPAD(CAST((CAST(SUM(srv_grp_answd_dur) AS INT) / CAST(sum(srv_grp_answd_cnt) AS INT)) % 60 AS STRING), 2, '0')
    )
END AS avg_grp_answd_dur

如果你的平均秒数超过24小时,以上实现都支持显示大于24的小时数,不会出现时间溢出截断的问题。

内容的提问来源于stack exchange,提问作者Andreas Rigas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:09:01