SQL实现微秒级时长转换为DD:HH:MM:SS或累计小时格式
解决方案
原语句的核心问题是依赖DATETIME类型的时间格式转换,而DATETIME的时间部分最大仅支持23小时,超过24小时的部分会自动进位到日期字段,因此转换时会丢失超出的时长。以下是两种需求的实现方案:
方案1:输出DD:HH:MM:SS带天数格式
直接基于微秒计算总秒数后拆分各时间单位,自动补前导零:
SELECT CONCAT( RIGHT('0' + CAST(duration / 1000000 / 86400 AS VARCHAR(10)), 2), ':', RIGHT('0' + CAST((duration / 1000000 % 86400) / 3600 AS VARCHAR(2)), 2), ':', RIGHT('0' + CAST((duration / 1000000 % 3600) / 60 AS VARCHAR(2)), 2), ':', RIGHT('0' + CAST(duration / 1000000 % 60 AS VARCHAR(2)), 2) ) AS [DD:HH:MM:SS] FROM 你的表名
方案2:输出小时不封顶的HH:MM:SS格式
不做天数拆分,直接累计总小时数:
SELECT CONCAT( CAST(duration / 1000000 / 3600 AS VARCHAR(10)), ':', RIGHT('0' + CAST((duration / 1000000 % 3600) / 60 AS VARCHAR(2)), 2), ':', RIGHT('0' + CAST(duration / 1000000 % 60 AS VARCHAR(2)), 2) ) AS [HH:MM:SS] FROM 你的表名
如果需要保留秒的小数部分,只需把微秒除以1000取余数,拼接到秒的字段后即可。
内容的提问来源于stack exchange,提问作者Glenn
相关产品推荐
相关产品推荐

