将Irregular Varchar转换为Numeric

时间:2016-04-14 18:19:45

标签: sql-server sql-update decimal varchar

我有一张超过16,000行的表格,描述了欠客户账单的钱。不幸的是,欠款是以一种奇怪的方式设置的 - 货币金额存储为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 个答案:

答案 0 :(得分:1)

这适用于您的奇怪字符串格式。

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