Ошибка преобразования типа данных nvarchar в числовой.Пробовал конвертировать и заменять - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь добавить сумму моего прогноза, используя код

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

Я получаю сообщение об ошибке

Ошибка преобразования типа данных nvarchar в числовой.

Я использовал оператор case, чтобы выяснить, какие строки не удалось.Вот некоторые из них

Было бы очень полезно получить решение

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы не работаете с пустым регистром, это работает с тестовыми данными:

select sum(cast(case when replace(replace(ZFREEGOOD,',',''),' ','') = '' then '0' else replace(replace(ZFREEGOOD,',',''),' ','') end as decimal(22,8))) from TEMP_GBR_History_1611
0 голосов
/ 27 ноября 2018

Один из вариантов - использовать 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
...