2012-08-16 41 views
3

我有一個現有的表,其中包含類型爲NVARCHAR的'price_info'列。我想添加MONEY類型的新列「價格」,並在可能的情況下將'price_info'列的內容轉換/複製到該列中。如何將NVARCHAR安全地轉換爲MONEY

如果'price_info'僅包含數字數據,則可以輕鬆地轉換該值。但當然'price_info'也可以包含無法轉換爲MONEY類型的數據,在這種情況下會發生錯誤。

有沒有辦法只複製到MONEY的轉換成功的值,並且靜靜地忽略所有其他行(或者在這些情況下將'price'列設置爲0)?

E.g.我想要的是這樣的(僞代碼):

update products set price = some_conversion_function(money, price_info, 0) 

(其中0是在轉換失敗時使用的默認值)。

回答

3

如果您需要通過腳本執行此操作,那麼您可以運行2個更新。

更新1:運行的更新和設定價格,其中ISNUMERIC爲真

update products 
set price = convert(money, price_info) 
where ISNUMERIC(price_info) = 1 

更新2:運行一個更新的價格設置爲0,其中ISNUMERIC是假的。

update products 
set price = 0 
where ISNUMERIC(price_info) = 0 

您可以在ISNUMERIC得到的文檔這裏http://msdn.microsoft.com/en-us/library/ms186272.aspx

+1

'try_convert'只有2012。這個問題被標記爲2008 – 2012-08-16 15:31:37

+0

我直接從他的問題中複製了代碼,我添加的所有代碼都是WHERE子句,實際上我甚至都不知道try_convert,我認爲這是他們編寫的自定義函數。時間來閱讀:) – StevenMcD 2012-08-16 15:33:18

+0

謝謝,這是有效的。我不知道有'try_convert'函數(因爲我使用的是SQL 2008),但它仍然可以與普通的'convert'函數一起使用。 – M4N 2012-08-16 15:33:47