[SQL] SQL Server 數據處理小技巧, 合理取捨小數位

當對金額進行操作的時候, 對於小數處理不盡相同. 可能向上取整,可能向下取整,亦可能四捨五入取整, 也有可能保留或捨棄一部分小數.

四捨五入 : ROUND 函數
1. 四捨五入取整: ROUND(val, 0)    直接四捨五入val中小數
SELECT ROUND(12.45, 0)  -- 結果 : 12.00
SELECT ROUND(12, 0)     -- 結果 : 12
2. 四捨五入保留固定小數: ROUND(val, a)    四捨五入精確到val右a位, 或者左a位(a爲負數)
SELECT ROUND(12.345,2)   --結果 : 12.350
SELECT ROUND(154.36,-1)  --結果 : 150.00
SELECT ROUND(154.36,-2)  --結果 : 200.00
向上向下取整 : CEILING(val) / FLOOR(val)
1. 對於向上取整 CEILING(val), 只要val有任意一個小數位不爲0, 即向上取整.
SELECT CEILING(12.000)   --結果 : 12
SELECT CEILING(12.001)   --結果 : 13
SELECT CEILING(12.345)   --結果 : 13
2. 向下取整 FLOOR(val) , 無論val中小數是不是爲0 全部捨棄掉
SELECT FLOOR(12.000)     --結果 : 12
SELECT FLOOR(12.543)     --結果 : 12
.
以上爲基本的四捨五入與取整操作, 但是實際工作中不一定滿足工作需求, 比如Action: 保留2位小數向下取整 (捨棄掉2位小數後的所有小數).
由於SQL Server中 Ceiling 和 Floor 函數 不能像Oracle中直接可以設置取整的小數位. 所以對於向上下取整且保留固定小數位解決辦法:
方法1 : SELECT CEILING(12.345 * 100) / 100
方法2 : SELECT LEFT(12.345, CHARINDEX('.', 12.345) + 2)
注意: 方法1的結果爲: 12.340, 而方法2的結果爲: 12.34.
同樣對於四捨五入保留小數的時候Round函數同樣也會出現捨棄的小數補零的情況, 代替辦法可以爲:
SELECT CONVERT(decimal(18,2), 12.356)
利用Convert方法轉換結果爲: 12.36, 末尾不會出現補零現象, 如果使用Round(12.356, 2), 結果會爲12.360.

本文原創由`bluetata`發佈於blog.csdn.net、轉載請務必註明出處。


Flag Counter

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章