2011-06-05 40 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