2011-07-04 21 views
0

時間を含む日付から作業時間を計算するクエリがあります。SQLクエリの丸め誤差で時間を差し引く

AM午前7時00分00秒2011年1月7日 - 例えば、2011年1月7日午前五時40分00秒PM - SQLは

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

StartTimeEndTimeある

0.5 = 10.166666されています両方ともdatetimeタイプ。 Lunchnumeric(9,1)です。

午前6時〜午後5時などの時間を追加すると問題なく動作しますが、34,10,2を追加すると誤って切り上げられます。

私は間違っていますか?

+0

'1.'あなたの例では、何の関係もありません( '-0.5'はどこから来ていますか?) '2'私は '34、10、2'を追加することであなたが意味することを知りません。 '' 3.あなたの例(-0.5なし)は、私が正しいと信じている640分または10.6666時間を私に与えます。 –

+0

@Lieven: '60.0'と' lunch'の間に '-'がない可能性があります。 –

+0

@webb:「ランチ」では数時間でなく分を保存するべきでしょうか?そうすれば、計算がより正確になる可能性があります。もちろん、公式はわずかに異なります: '(DATEDIFF(分、StartTime、EndTime) - ランチ)/ 60.0 AS HoursWorked'。 –

答えて

3

60.0は10進数(3,2)であり、小数除算の規則はかなり複雑です。あなたがここに一緒に入れて

以上の6分の精度を持つことはできません

lunch進(9,1)もそう、それは単に精度の問題です。

私は完全にそれを仕事するつもりはない(あなたは私の答えhereを見ることができる)ので、これを試してみてください、または明示的なCAST、またはいくつかの組み合わせ

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

消化するのはちょっと寒いです。ありがとうございました – webb