You need to enable JavaScript to run this app. SQL Server使用decimal(10,1)计算时间时结果不一致问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server使用decimal(10,1)计算时间时结果不一致问题咨询

SQL Server两次时间单位换算结果不一致的原因

你遇到的偏差本质是舍入计算的执行顺序不同导致的误差累计差异,具体拆解如下:

两个查询的计算逻辑差异

  • 第一个分组查询的执行顺序:
    1. 逐行计算单条记录的秒数转小时结果:单条totalsec / 3600
    2. 逐行将上述结果舍入保留1位小数:CAST(结果 AS decimal(10,1))
    3. 对所有舍入后的小数做求和,再格式化输出

手动计算逐行舍入后的结果累加值,和第一个查询输出完全匹配:

单条秒数换算为小时(精确值)舍入保留1位小数
15030.41750.4
893≈0.2480.2
14524≈4.0344.0
6631≈1.8421.8
13≈0.0040.0
889≈0.2470.2
4490≈1.2471.2

所有舍入后的值相加:0.4+0.2+4.0+1.8+0.0+0.2+1.2 = 7.8

  • 第二个直接计算总秒数的查询执行顺序:
    1. 先对所有秒数求和得到28943
    2. 直接对总秒数做换算:28943/3600≈8.0397
    3. 将上述结果舍入保留1位小数得到8.0,格式化后输出

解决方案

如果需要两次结果一致,统一调整为「先求和再做换算和舍入」即可,修改第一个查询的语句为:

SELECT userid,FORMAT( CAST((SUM(totalsec) / 3600.0) as decimal(10,1)) ,'N1')
FROM dbo.MyTable
group by userid,cast(udatetime as date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 14:03:03