摘要: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 的餘數,而在欄位裡就不行呢??
各位如果有好的解決方案,歡迎一起討論唷...
如果您有更好的解決方案...
歡迎您一同交流並留下您的意見哦...!!