SQL 中針對數值進位有幾個相關函式:
1. CEILING(numeric_expression): 傳回大於或等於指定數值運算式的最小整數
2. FLOOR(numeric_expression):傳回小於或等於指定數值運算式的最大整數
3. ROUND(numeric_expression,length):傳回數值,四捨五入到指定的長度或有效位數。(length為指定的小數點後有效位數
註:針對 float 格式欄位或 real 格式欄位使用ROUND函數,請先轉換成 decimal
因為float 與 real 都是近似值,若直接處理,可能會得到奇怪的答案。
例:
1.
SELECT CEILING(123.45) ==> 結果: 124
SELECT CEILING(-123.45) ==> 結果: -123
2.
SELECT FLOOR(123.45) ==> 結果: 123
SELECT FLOOR(-123.45) ==> 結果: -124
3. 註:針對 float 或 real 格式欄位使用ROUND函數,請先轉換成 decimal ,因為float 與 real 都是近似值,若直接處理,可能會得到奇怪的答案。
下列為了方便閱讀,並未轉換成decimal
SELECT ROUND(123.44,1) ==> 結果: 123.40
SELECT ROUND(123.45,1) ==> 結果: 123.50
SELECT ROUND(123.45,0) ==> 結果: 123.00
SELECT ROUND(123.55,0) ==> 結果: 124.00
--如果有效位數指定為負值,則會以[四捨五入 ]方式,進位到小數點前指定位數
SELECT ROUND(125.55, 0) ==> 結果: 126.00 (四捨五入到個位數)
SELECT ROUND(125.55,-1) ==> 結果: 130.00 (四捨五入到十位數)
SELECT ROUND(125.55,-2) ==> 結果: 100.00 (四捨五入到百位數)
--有效位數指定為負值,但指定位數不存在時的特殊狀況:
SELECT ROUND(125.55,-3) ==> 結果: 0.00 (四捨五入到千位數,但千位數不存在時,若是[捨去]則後面位數全部變成0)
SELECT ROUND(523.45,-3) ==> 結果:執行批次時發生錯誤。錯誤訊息為: 算術溢位。 (四捨五入到千位數,但千位數不存在時,若是[進位]則會發生算數溢位錯誤,不過這是直接針的數值處理的狀況,,如果轉成decimal則可順利執行,如下式)
SELECT ROUND(CAST(523.45 AS decimal),-3) ==>結果:1000 (轉換成decimal擴充有效位數時)
-