2016-04-14 4 views
0

У меня есть стол с более чем 16 000 строк, изображающий деньги, причитающиеся по счетам клиентов. К сожалению, сумма задолженности была создана странным образом - денежные суммы хранятся как VARCHAR и на любое время, когда деньги обусловлено, знак минус справа от числа, как это:Преобразование нерегулярного Varchar в числовое

Amount 
36.30 
21.48- 
132.65- 
87.91- 
1.20 

У меня есть добавлен новый столбец в моей таблице называется Amount_num, и я хотел бы сделать обновление к моему столу, что даст мне следующее:

Amount Amount_num 
36.30  36.30 
21.48-  -21.48 
132.65-  -132.65 
87.91-  -87.91 
1.20  1.20 

Я попробовал следующий запрос обновления:

UPDATE [CHARGE_TABLE] 
SET [Amount_num] = CAST ([Amount] as decimal (18,2)) 

Это дает мне «Ошибка преобразования типа данных varchar в числовой». Что я должен изменить?

ответ

1

Это должно работать для вашего странного строкового формата.

UPDATE [CHARGE_TABLE] 
SET [Amount_num] = convert(numeric(18,2), Case when Amount like '%-' then '-' else '' end + REPLACE(Amount, '-', '')) 
+0

Хотя это должно устранить проблему, показанную здесь, OP все еще может иметь проблемы, когда данные не соответствуют этому формату, а также нормальным номерам. Часто, когда varchar используется, когда его не должно быть, тогда мусор хранится. Я говорю об этом только потому, что ОП не отклонит ответ, если он все еще не работает. – HLGEM

+0

Это действительно сработало! К счастью, данные были не такими грязными, как это могло быть, - ни слов, ни других символов, которые не принадлежали. Спасибо вам за помощь! – mdarr