請參考以下的範例:
--EX1. 傳回數值,捨入到指定的長度或有效位數。 -- 語法:ROUND ( numeric_expression , length [ ,function ] ) SELECT ROUND(123.9994, 3), ROUND(123.9995, 3), ROUND(123.9996, 3)
--EX2. 有關於 0.點的精確數值之轉換 -- 被截斷 SELECT ROUND(0.4, 0)
-- 判斷需要進位,但卻發生錯誤。 SELECT ROUND(0.5, 0) /* 回傳錯誤訊息: 訊息 8115,層級 16,狀態 2,行 1 轉換 expression 到資料類型 numeric 時發生算術溢位錯誤。 訊息 8115,層級 16,狀態 2,行 1 Arithmetic overflow error converting expression to data type numeric. */
-- 使用CAST 函數,明確的資料轉型 SELECT CAST (0.5 AS numeric(2,1))
-- 再搭配使用 ROUND 捨入到指定的長度或有效位數。 SELECT ROUND(CAST (0.4 AS numeric(2,1)), 0), ROUND(CAST (0.5 AS numeric(2,1)), 0), ROUND(CAST (0.6 AS numeric(2,1)), 0)
-- 或是使用單引號,以字串的類型來做處理。 SELECT ROUND('0.4', 0), ROUND('0.5', 0), ROUND('0.6', 0)
--EX3. 捨入到指定的長度或有效位數。 -- 語法:ROUND ( numeric_expression , length [ ,function ] ) SELECT ROUND(150.45, 0), ROUND(150.55, 0), ROUND(150.65, 0)
--EX4. function 指定 0 以外的值時,會截斷 /* 語法:ROUND ( numeric_expression , length [ ,function ] ) 當省略 function,或其值為 0 (預設值) 時,會捨入 numeric_expression。 當指定 0 以外的值時,會截斷 numeric_expression。 */ SELECT ROUND(150.75, 0, 1);
以下是摘錄 SQL Server 2008 線上叢書:ROUND (Transact-SQL)
ROUND (Transact-SQL)
傳回數值,捨入到指定的長度或有效位數。
語法:
ROUND ( numeric_expression , length [ ,function ] )
ROUND 一律傳回值。如果 length 是負的,且大於小數點前面的位數,ROUND 會傳回 0。
--
參數說明:
numeric_expression
這是精確數值或近似數值資料類型類別目錄的運算式,但 bit 資料類型除外。
length
這是 numeric_expression 捨入的有效位數。
length 必須是 tinyint、smallint 或 int 類型的運算式。
當 length 是正數時,numeric_expression 會捨入到 length 所指定的十進位數。
當 length 是負數時,numeric_expression 會依照 length 所指定,在小數點左側捨入。
function
這是要執行的作業類型。function 必須是 tinyint、smallint 或 int。
當省略 function,或其值為 0 (預設值) 時,會捨入 numeric_expression。
當指定 0 以外的值時,會截斷 numeric_expression。
參考資料:
ROUND (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms175003.aspx
沒有留言:
張貼留言