2016-04-14 60 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被使用時,它不應該,然後垃圾被存儲。我只是這樣說,所以如果OP仍然無效,OP不會拒絕答案。 – HLGEM

+0

這實際上工作!幸運的是,數據並不像它本來的那麼混亂 - 沒有任何文字或其他符號不屬於它們。謝謝你們倆的幫助! – mdarr