2013-11-26 208 views
1

我有一個查詢,但它沒有給出正確的答案。我想顯示像這樣5小時58分鐘+7小時58分鐘= 13小時56分鐘(答案應該是13.56),但下面的查詢給出輸出13.6。 請回復我的任何其他解決方案。 (Effort1爲5小時列,Effort1Minutes爲58分鐘列和相同Effort2是7小時列,Effort2Minutes 58分鐘列。分鐘超過60分鐘的小時數和分鐘數總和

select SUM(Effort1 + Effort2) + SUM(Effort1Minutes + Effort2Minutes)/60 + CONVERT(decimal(18,2), (SUM(Effort1Minutes + Effort2Minutes) % 60)/100.00) 
from TimesheetDetails 

回答

2

當你有一個錘子,所有問題看起來都像釘子。這是一種常見的你爲什麼要使用這樣一個令人費解的查詢來計算時間的總和陷阱,這基本上意味着「用每個給定的問題正確的工具」。

  1. 你爲什麼不有兩種TIME列,稍後可以使用ADDDATE(d1, d2)

  2. 爲什麼不使用SQL 99標準中定義的TIME INTERVAL數據類型?

  3. 爲什麼不在幾分鐘內返回結果,並讓應用程序將其轉換爲您選擇的格式?

  4. 爲什麼不單獨返回小時和分鐘,並再次讓應用程序處理分鐘總和可能產生的額外小時?

正如你所看到的,還有很多其他的解決方案可以從根本上解決你的問題,同時也給你一個更好的數據庫設計。請考慮他們,特別是頭號。

+0

儘管使用'time'列可能會得到,但它仍然不是正確的數據類型。 「時間」意味着代表一天的時間 - 而不是時間間隔。並且,鑑於OP正在執行這些值的增加,它表明它們意味着間隔。 –

+0

如果你想要非常貼近類型的意義,你可以隨時記錄'Time1Start''Time1End'等等,但無論如何我沒有提供具體的解決方案,而只是一個讀者關於提高他/她的思想練習數據庫 –

+0

這個問題更多的是與例如'時間'不能容納超過24小時的時間 - 這個時間間隔的總和很容易超過。 –