SQL Server低兼容级别下如何对两列时间值的时分秒求和
低兼容级别SQL Server两时间字段求和方案
核心思路:无需拆分字符串,直接通过时间函数计算两个时间的总秒数之和,再格式化输出,兼容SQL Server 2008及以上版本,无需修改数据库兼容级别。
情况1:newTime、oldTime为time类型字段
直接通过时间差值计算总秒数求和即可:
SELECT CONVERT(varchar, DATEADD(SECOND, DATEDIFF(SECOND, '00:00:00', newTime) + DATEDIFF(SECOND, '00:00:00', oldTime), '00:00:00'), 108) AS 总时长 FROM 你的表名
逻辑说明:DATEDIFF(SECOND, '00:00:00', 时间字段)会计算该时间距离零点的总秒数,两个秒数相加后用DATEADD回写到零点时间上,再转成108格式的时间字符串,即可得到hh:mm:ss格式的总时长,你的示例数据计算后会直接返回07:15:08。
情况2:newTime、oldTime为varchar类型存储的时间字符串
先转成time类型再计算即可:
SELECT CONVERT(varchar, DATEADD(SECOND, DATEDIFF(SECOND, '00:00:00', CONVERT(time, newTime)) + DATEDIFF(SECOND, '00:00:00', CONVERT(time, oldTime)), '00:00:00'), 108) AS 总时长 FROM 你的表名
特殊场景:总时长超过24小时的处理
上述写法会自动截断24小时以上的部分,如果需要保留超过24小时的时长,可以手动拼接格式化:
SELECT CAST(总秒数/3600 AS VARCHAR) + ':' + RIGHT('0' + CAST((总秒数%3600)/60 AS VARCHAR),2) + ':' + RIGHT('0' + CAST(总秒数%60 AS VARCHAR),2) AS 总时长 FROM ( SELECT DATEDIFF(SECOND, '00:00:00', newTime) + DATEDIFF(SECOND, '00:00:00', oldTime) AS 总秒数 FROM 你的表名 ) t
该写法支持展示超过24小时的时长,比如26小时3分5秒会返回26:03:05。
内容的提问来源于stack exchange,提问作者user12366709
相关产品推荐
相关产品推荐

