星期五, 1月 06, 2012

[SQL] 數學運算-小數

小數位數的四捨五入(Round Off)、無條件進位(Round Up)和無條件捨去(Round Down),要如何利用 T-SQL 語法達到此效果。

    ROUND(numeric_expression , length [ ,function ]) 函數
  • 函數說明:傳回數值,捨入到指定的長度或有效位數。
  • numeric_expression 參數: 這是精確數值或近似數值資料類型類別目錄的運算式,但 bit 資料類型除外。
  • length 參數:這是 numeric_expression 捨入的有效位數。length 必須是 tinyint、smallint 或 int 類型的運算式。當 length 是正數時,numeric_expression 會捨入到 length 所指定的十進位數。當 length 是負數時,numeric_expression 會依照 length 所指定,在小數點左側捨入。
  • function 參數:這是要執行的作業類型。function 必須是 tinyintsmallintint。當省略 function,或其值為 0 (預設值) 時,會捨入 numeric_expression。當指定 0 以外的值時,會截斷 numeric_expression。 
  • 上述 MSDN 說明中,捨入是指四捨五入、截斷是指無條件捨去

    CEILING() 函數
  • 函數說明:傳回大於或等於指定數值運算式的最小整數。

-- 範例說明:對小數第二位進行,四捨五入、無條件捨去和無條件進位

SELECT 
    T.Number AS '數字',
    ROUND(T.Number,2) AS '四捨五入',
        -- ROUND() 的基本使用
    ROUND(T.Number,2,1) AS '無條件捨去',
        -- 指定 ROUND() 的 function 參數不為 0 ,則會進行無條件捨去
    CEILING(T.Number * 100) / 100 AS '無條件進位'  
        -- 利用 CEILING() 來達到此效果,
        -- 假如是要針對小數第三位則乘 1000 ,除1000。
FROM
  (
      SELECT 100.129 AS Number
      UNION ALL
      SELECT 100.126
      UNION ALL
      SELECT 100.125
      UNION ALL
      SELECT 100.124
      UNION ALL
      SELECT 100.120
  ) AS T
[SQL] 數學運算-小數


沒有留言:

張貼留言