如何使用DateDiff计算带小数的小时差避免结果自动取整?
问题根源
你用的datediff(Hour,FirstTime,SecondTime)*1.0写法拿不到小数小时差,核心原因是*datediff指定Hour为计算单位时,返回值本身是两个时间跨过的小时边界整数计数,不会计算不足1小时的小数部分*。
你之前给两个时间字段做类型转换、格式化都不生效,是因为问题和入参类型无关,是函数本身的计算规则决定的:只要统计单位选的是小时,它就只会返回整数结果,乘1.0只是把整数转成浮点型,不会补出小数位。你遇到的4.5小时差值返回5.0,就是因为两个时间跨了5个小时整点边界,函数直接返回整数5导致的。
解决方法
不要用小时作为datediff的统计单位,改用更小的时间粒度计算总差值,再手动换算成小时即可:
- 精度要求到分钟的场景:
datediff(Minute, FirstTime, SecondTime) * 1.0 / 60
- 精度要求到秒的场景(无分钟级舍入误差):
datediff(Second, FirstTime, SecondTime) * 1.0 / 3600
按这个写法,4小时30分的差值会算出270分钟/16200秒,换算后正好得到4.5的结果。
如果你用的数据库支持直接计算时间戳差值,也可以直接取两个时间的unix时间戳相减,再除以3600得到小时值,计算逻辑和上面的写法完全一致。
内容的提问来源于stack exchange,提问作者Comicwizard
相关产品推荐
相关产品推荐

