如何安全地将NVARCHAR转换为MONEY

时间:2012-08-16 15:19:12

标签: sql-server sql-server-2008 tsql type-conversion

我的现有表格中包含NVARCHAR类型的'price_info'列。我想添加MONEY类型的新列“价格”,并且(在可能的情况下)将“price_info”列的内容转换/复制到其中。

如果'price_info'仅包含数字数据,则可以轻松转换该值。但是'price_info'当然也可以包含无法转换为MONEY类型的数据,在这种情况下会发生错误。

有没有办法只复制转化为MONEY成功的值,并默默忽略所有其他行(或在这些情况下将'price'列设置为0)?

E.g。我想拥有的是这样的(伪代码):

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

(其中0是转换失败时使用的默认值。)

1 个答案:

答案 0 :(得分:3)

如果您只需要通过脚本执行此操作,那么您可以运行2次更新。

更新1:运行更新并设置ISNUMERIC为真的价格

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

更新2:运行更新以将价格设置为0,其中ISNUMERIC为false。

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

您可以在http://msdn.microsoft.com/en-us/library/ms186272.aspx

获取有关ISNUMERIC的文档