2011-06-05 35 views
4

我試圖nvarchar轉換爲decimal (18,2)和我收到以下消息:問題轉換爲nvarchar成十進制T-SQL

消息8115,級別16,狀態6,行2
算術溢出將nvarchar轉換爲數據類型數字時出錯。

演員陣容:CAST(bm_onnet AS decimal(18,2)) as bm_onnet_corr, 它只能當值只有最多3位小數,不低於價值的工作:

21.8333333333333333333333333333333333333 

我應該如何修改我的選擇?

回答

0
select 
     case when charindex('.',bm_onnet)) > = 2 then 
      convert(decimal(18,2),substring(bm_onnet,0,charindex('.',bm_onnet)+3)) 
     else 
      convert(decimal(18,2),bm_onnet) 
     end 

太早使用此代替。

+0

我應該彈出它可能有救了我很多麻煩打開SQL Server。 – JStead 2011-06-05 13:51:51

+0

是的,這是一個很好的解決方案,謝謝! – 2011-06-05 14:19:20

7

使用功能全面

例如

declare @v nvarchar(100) = '21.8333333333333333333333333333333333333' 

select convert(decimal(18,2),round(@v,2)) 

一個選擇是這樣的

SELECT CAST(round(bm_onnet,2) AS decimal(18,2)) as bm_onnet_corr 
+0

這將工作在一個SQL程序中,我只需要一個簡單的選擇的答案,謝謝! – 2011-06-05 14:20:15

+1

只需將@v替換爲列名稱,請參閱附加代碼 – SQLMenace 2011-06-05 14:37:45

+0

+1。 'CAST(CAST(bm_onnet AS float)AS decimal(18,2))'也可以。 – 2011-06-05 17:18:16