将数据类型nvarchar转换为数字时出错。尝试转换并替换

时间:2018-11-27 20:02:48

标签: sql-server sqldatatypes algebraic-data-types

我正在尝试使用代码添加预测的总和

select 
    sum(cast(replace(replace(ZFREEGOOD, ',', ''), ' ', '') as decimal(22,8))) 
from 
    TEMP_GBR_History_1611

我不断收到错误消息

  

将数据类型nvarchar转换为数字时出错。

我使用了case语句来找出哪些行失败。这些是其中一些

获得解决方案会很有帮助

enter image description here

2 个答案:

答案 0 :(得分:2)

一种选择是使用try_convert(money,...),这通常会更宽容。

示例

Select AsMoney = try_convert(money,' 27,300')   -- works!
      ,AsInt   = try_convert(int,' 27,300')
      ,AsDec   = try_convert(decimal(10,2),' 27,300')
      ,AsFloat = try_convert(float,' 27,300')

返回

AsMoney     AsInt   AsDec   AsFloat
27300.00    NULL    NULL    NULL

答案 1 :(得分:2)

您不处理空白情况,这适用于测试数据:

select sum(cast(case when replace(replace(ZFREEGOOD,',',''),' ','') = '' then '0' else replace(replace(ZFREEGOOD,',',''),' ','') end as decimal(22,8))) from TEMP_GBR_History_1611