我有一个查询,可以计算从包括时间在内的日期开始的工作小时数。
例如,2011/1/07 7:00:00 AM - 1/07/2011 17:40:00 - 0.5 = 10.166666
该 SQL 是
SELECT entityID, StaffID, ActualDate,
DATEDIFF(minute, StartTime, EndTime) / 60.0 lunch AS HoursWorked
FROM dbo.qasiteTimesheet
StartTime
和EndTime
都是datetime
类型。 Lunch
是numeric(9,1)
.
至下午 5:00,它工作正常,但添加 34、10、2 它会错误地四舍五入。
我做错了什么?
60.0
是十进制(3,2(,小数除法的规则非常复杂。
lunch
小数(9,1(,所以这里的精度永远不会超过 6 分钟
总而言之,这是一个简单的精度问题。
我不会完全解决它(你可以在这里看到我的答案(,所以试试这个,或者一个明确的 CAST,或者一些组合
(DATEDIFF(minute, StartTime, EndTime) - (60.0*lunch)) / 60.0 - AS HoursWorked