如何计算两个日期时间的绝对值时间差并格式化为HH:MM:SS
如何计算两个日期时间的绝对值时间差并格式化为HH:MM:SS
我来帮你解决这个问题!你遇到的核心问题是没处理日期差值的正负:当@Date2晚于@Date1时,DATEDIFF(s, @Date2, @Date1)会返回负数,用这个负数去DATEADD到基准时间0(也就是1900-01-01 00:00:00),得到的其实是基准时间往前推对应秒数的结果,自然就变成了23:59:59这种不符合预期的值。
解决方法很简单,只需要对秒数差值取绝对值,确保不管哪个日期在前,我们计算的都是正的时间差,再做后续的格式转换就可以了。
修改后的完整代码
DECLARE @Date1 datetime DECLARE @Date2 datetime set @Date1='6/30/2023 11:06:39 AM' set @Date2='6/30/2023 11:06:40 AM' -- 取秒数差的绝对值,再转换为HH:MM:SS格式 select left(CONVERT(varchar(12), DATEADD(s, ABS(DATEDIFF(s, @Date2, @Date1)), 0), 114), 8)
代码分步解释
ABS(DATEDIFF(s, @Date2, @Date1)):先计算两个日期之间的秒数差值,再用ABS()取绝对值,保证结果始终是正数,不管哪个日期更早。DATEADD(s, ..., 0):把这个正的秒数差加到SQL的基准时间1900-01-01 00:00:00上,得到一个代表时间差的datetime值。CONVERT(varchar(12), ..., 114):用114格式转换后会得到HH:MI:SS:mmm的字符串(包含毫秒),最后用left(...,8)截取前8位,就得到了我们需要的HH:MM:SS格式。
测试验证
- 当
@Date2比@Date1晚1秒时,结果会是00:00:01,完全符合预期。 - 反过来如果
@Date1比@Date2晚5分钟,比如@Date1='6/30/2023 11:11:39 AM',@Date2='6/30/2023 11:06:39 AM',结果会是00:05:00,同样正确。
备注:内容来源于stack exchange,提问作者unicorn
相关产品推荐
相关产品推荐

