Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何安全地将NVARCHAR转换为货币_Sql Server_Sql Server 2008_Tsql_Type Conversion - Fatal编程技术网

Sql server 如何安全地将NVARCHAR转换为货币

Sql server 如何安全地将NVARCHAR转换为货币,sql-server,sql-server-2008,tsql,type-conversion,Sql Server,Sql Server 2008,Tsql,Type Conversion,我有一个现有的表,其“price\u info”列的类型为NVARCHAR。我想添加一个类型为MONEY的新列“price”,并(在可能的情况下)将“price\u info”列的内容转换/复制到该列中 如果“价格信息”仅包含数字数据,则可以轻松转换该值。当然,“价格信息”也可能包含无法转换为类型MONEY的数据,在这种情况下会发生错误 是否有一种方法可以仅复制成功转换为MONEY的值,并自动忽略所有其他行(或在这些情况下将“price”列设置为0) 例如,我想要的是这样的东西(伪代码): (其

我有一个现有的表,其“price\u info”列的类型为
NVARCHAR
。我想添加一个类型为
MONEY
的新列“price”,并(在可能的情况下)将“price\u info”列的内容转换/复制到该列中

如果“价格信息”仅包含数字数据,则可以轻松转换该值。当然,“价格信息”也可能包含无法转换为类型
MONEY
的数据,在这种情况下会发生错误

是否有一种方法可以仅复制成功转换为
MONEY
的值,并自动忽略所有其他行(或在这些情况下将“price”列设置为0)

例如,我想要的是这样的东西(伪代码):


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

如果只需要通过脚本执行此操作,则可以运行2个更新

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

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

您可以在此处获取ISNUMERIC上的文档

try\u convert
仅限2012年。问题被标记为2008年我直接从他的问题中复制了代码我添加的只是WHERE子句,实际上我甚至不知道try\u convert,我假设这是他们编写的自定义函数。是时候读一读了:)谢谢,行得通。我不知道有一个
try\u convert
函数(我使用的是SQL 2008),但它仍然可以与正常的
convert
函数一起工作。我使用
try\u convert
作为我想要的示例(某种伪代码)。
update products 
set price = 0
where ISNUMERIC(price_info) = 0