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擴充有效位數時)



               

       

               -

       

              

       

       

           

      arrow
      arrow

        Byron 發表在 痞客邦 留言(1) 人氣()