我正在处理遗留数据库,这种数据库与其数据类型混杂在一起。有些列应为integers
,但保存为varchar(9)
。我正在创建表的新版本并尝试正确导入整数值。对于需要转换为int的字段,我有以下语句:
CASE
ISNUMERIC(fieldname)
WHEN 0 THEN NULL
ELSE CAST(fieldname AS int) AS fieldname
不断绊倒的价值是:029999E00
。
错误是:
将varchar值'029999E00'转换为int。
时转换失败
大多数时候,这很好用,会给我一个有效的int值或NULL。
为什么ISNUMERIC
说这个值是int,但是CAST
无法转换它?我也试过了bigint
,得到了同样的结果。有没有其他方法可以检查这样的值?
还有一篇关于使用ISNUMERIC作为解决方案的文章,但ISNUMERIC在这种情况下不起作用。我需要另一个选项来检查数值或确保CAST语句在获取值时不会失败(如果它是十六进制值)。
答案 0 :(得分:0)
为什么不使用TRY_CONVERT?如果它可以创建一个INT,否则它将返回NULL。