2011-07-04 27 views
0

我有一個查詢可以計算從包含時間的日期開始工作的小時數。在SQL查詢舍入錯誤中減去時間

例如2011年1月7日上午07時00分〇〇秒 - 2011年1月7日下午5時40分○○秒 - 0.5 = 10.166666

的SQL是

SELECT entityID, StaffID, ActualDate, 
    DATEDIFF(minute, StartTime, EndTime)/60.0 lunch AS HoursWorked 
    FROM  dbo.qasiteTimesheet 

StartTimeEndTime和是均爲datetime類型。 Lunchnumeric(9,1)

如果我添加整個小時,例如上午6:00 - 下午5:00,它可以正常工作,但是添加34,10,2不正確。

我在做什麼錯?

+0

'1.'你的榜樣無關與您的查詢(從哪裏來的'-0.5'?)。 '''我不知道你的意思加了'34,10,2'。 '3.'你的例子(沒有-0.5)給我640分鐘或10.6666小時,至少我認爲是正確的。 –

+0

@Lieven:'60.0'和'lunch'之間可能缺少'-'。 –

+0

@webb:也許你應該在「午餐」中存儲分鐘而不是幾小時。這樣計算可能會更精確。當然,公式會略有不同:'(DATEDIFF(分鐘,開始時間,結束時間) - 午餐)/ 60.0 AS HoursWorked'。 –

回答

3

60.0是十進制(3,2),十進制除法規則相當複雜。

lunch十進制(9,1),所以你不能在這裏

放在一起超過6分鐘精度,這是一個簡單的精度問題。

我不會完全解決它(你可以看到我的回答here),所以試試這個,或者有明確的轉換,或某種組合

(DATEDIFF(minute, StartTime, EndTime) - (60.0*lunch))/60.0 - AS HoursWorked 
+0

消化有點冷。謝謝 – webb