我有一个查询,用于计算包含时间的日期的工时。
例如1/07/2011 7:00:00 AM - 1/07/2011 5:40:00 PM - 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)
。
如果我添加整个小时,例如上午6:00 - 下午5:00,它可以正常工作,但是添加34,10,2不正确。
我做错了什么?
答案 0 :(得分:3)
60.0
是十进制(3,2),十进制除法的规则非常复杂。
lunch
十进制(9,1)也是如此,所以你的准确度永远不会超过6分钟
放在一起,这是一个简单的精确问题。
我不打算完全解决(你可以看到我的回答here)所以试试这个,或者明确的CAST,或者某种组合
(DATEDIFF(minute, StartTime, EndTime) - (60.0*lunch)) / 60.0 - AS HoursWorked