SQL Server isnumeric将varchar视为十六进制值,但强制转换不会更改为int

时间:2016-04-25 18:37:45

标签: sql sql-server tsql

我正在处理遗留数据库,这种数据库与其数据类型混杂在一起。有些列应为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语句在获取值时不会失败(如果它是十六进制值)。

1 个答案:

答案 0 :(得分:0)

为什么不使用TRY_CONVERT?如果它可以创建一个INT,否则它将返回NULL。