2016-04-26 89 views
2
SELECT ROUND(99.12,-1); 

消息8115,級別16,狀態2,行1算術溢出錯誤 表達式轉換爲數據類型數值。會算術溢出錯誤將表達式轉換爲數據類型數值

此錯誤時表達的範圍是:在 除此之外範圍

  1. 95.00至99.99
  2. 5.00〜9.99
  3. 995.00至999.99,因此,它按預期工作。

但是當你在Oracle數據庫中執行相同的查詢時,它工作正常並給出了預期的輸出。

SELECT ROUND(99.12,-1) FROM DUAL; 
ans: 100 

所以有人可以解釋,爲什麼它的行爲一樣,在SQLSERVER2008

在此先感謝

回答

3

當您執行SELECT ROUND(99.12,-1),第一個參數是隱含NUMERIC(4,2),它不會允許超過2小數點前的數字。

95.00到99.99之所以失敗,是因爲它們被舍入爲100,不能適應NUMERIC(4,2)。類似的邏輯適用於你的其他邊緣情況。

閱讀this MSDN article進行大開眼界的討論。

1
SELECT ROUND(CAST(99.12 AS DECIMAL(5, 2)),-1); 
相關問題