You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何计算两个datetime值的精确小时差(含小数部分)

问题原因

DATEDIFF(HOUR, 开始时间, 结束时间)的计算逻辑是统计两个时间点之间跨过的整点小时边界数量,并非实际时间差换算的小时值:比如8:34到8:58没有跨过任何整点,返回值为0;10:33到次日8:37跨过了22个整点,返回值为22。你后续转换为decimal只是把整数结果转成了带两位小数的格式,自然不会出现小数部分。

解决方法

用更小的时间单位(秒/分钟)计算差值,再换算为小时即可,注意要除以浮点型数值避免整数除法自动取整:

SELECT
DocID,
CreateDate,
CompletedDate,
-- 用秒计算,精度最高,支持最大间隔为68年,完全满足普通业务场景
CONVERT(DECIMAL(10,2), DATEDIFF(SECOND, CreateDate, CompletedDate) / 3600.0) AS DiffHours
FROM Documents

效果验证

按上述逻辑计算你的样例数据:

  • 0001号单据间隔为23分46秒,换算后为≈0.40小时
  • 0002号单据间隔为22小时4分11秒,换算后为≈22.07小时

如果你的业务不需要精确到秒,也可以改用分钟计算,将DATEDIFF(SECOND)替换为DATEDIFF(MINUTE),除数改为60.0即可。


内容的提问来源于stack exchange,提问作者EJF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:45:03