T-SQL 取得餘數的問題

摘要:T-SQL 取得餘數的問題

今天在進行取餘數的動作時,發現資料庫算出來的數字少了小數點,但原本使用的方法如下


(CASE WHEN wpdHour >= 8.0 THEN wpdHour % 8.0 ELSE wpdHour END) AS wpdHour

裡面的 wpdHour 是 float 型態...但用這樣會出現下列的錯誤

modulo 運算子中的資料類型 float 和 numeric 不相容。

後來進行調整,改成


(CASE WHEN wpdHour >= 8.0 THEN CONVERT(INT,wpdHour) % 8.0 ELSE wpdHour END) AS wpdHour



但這樣會造成假設 wpdHour 是 19.2 的話取得的餘數會變成 3 而不是 3.2

最後使用的方式改成下列
 


(CASE WHEN wpdHour >= 8.0 THEN (wpdHour - (CONVERT(INT,wpdHour / 8)* 8)) ELSE wpdHour END) AS wpdHour 

也就是如果 wpdHour 是 19.2 的話...會執行 19.2 - ((19/8)*8) => 19.2- 16 => 3.2

 

雖然問題暫時解決了...但不解的地方是為什麼單純用 SELECT 19.2 % 8.0 可以正常取得 3.2 的餘數,而在欄位裡就不行呢??

各位如果有好的解決方案,歡迎一起討論唷...
 

 

 

如果您有更好的解決方案...

歡迎您一同交流並留下您的意見哦...!!