SQL Server将十进制值转换为超24小时的hh:mm总时长实现方法
SQL Server 累计时长转换实现方案
问题原因
原来的代码用Time类型存储转换结果,Time类型设计为存储单日时间点,最大值为23:59:59.9999999,超过24小时的时长会自动取模截断,因此会出现27小时输出为03:34的问题。
方案1:输出总小时:分钟累计格式
假设你的十进制列存储的是分钟为单位的时长数值,实现代码如下:
-- 示例数值1654.86分钟,对应27小时34分钟 SELECT CONCAT( CAST(FLOOR(你的时长列 / 60) AS VARCHAR(10)), ':', RIGHT('0' + CAST(CAST(FLOOR(你的时长列) AS INT) % 60 AS VARCHAR(2)), 2) ) AS 累计时长 FROM 你的表名
如果你的时长列存储的是秒为单位的数值,将计算逻辑改为FLOOR(你的时长列 / 3600)取总小时,FLOOR(你的时长列 / 60) % 60取分钟即可。
方案2:输出工作日+剩余时长格式
默认按1个工作日=8小时计算,可根据业务需求调整除数修改工作日时长标准:
SELECT CONCAT( FLOOR(FLOOR(你的时长列 /60)/8), '个工作日加', RIGHT('0' + CAST(FLOOR(你的时长列 /60) %8 AS VARCHAR(2)),2), ':', RIGHT('0' + CAST(CAST(FLOOR(你的时长列) AS INT) %60 AS VARCHAR(2)),2) ) AS 工作日时长 FROM 你的表名
拿示例数值1654.86分钟测试,输出结果为3个工作日加03:34,符合需求。
内容的提问来源于stack exchange,提问作者Paul Yang
相关产品推荐
相关产品推荐

