使用IF IsNumeric作为参数

Con*_*eak 7 t-sql sql-server sql-server-2008

我想知道如何在SQL中使用IsNumeric,它与VBScript有点不同,但我想我能绕过它,即:

 IF 1 = ISNUMERIC('5675754674') 
 BEGIN 
 ...
 END
Run Code Online (Sandbox Code Playgroud)

这会是一种解决方法吗?我真正想做的是:

IF ISNUMERIC('5675754674')
BEGIN 
... 
END
Run Code Online (Sandbox Code Playgroud)

但这给出了一个错误.示例1似乎有效,但只是确保我做得对,无法在网上找到任何好的资源.

Aar*_*and 15

booleanSQL Server中没有.这意味着你不能只说IF (expression); 你必须将它与某些东西进行比较,因为它确实会返回true或者false与你在其他语言中习惯的意义相同.

只是一个偏好,但我更喜欢这样写:

IF ISNUMERIC('5675754674') = 1
BEGIN
...
END
Run Code Online (Sandbox Code Playgroud)

SQL Server中没有办法避免与1进行比较,如第二个示例所示.

另外顺便说一句,你应该知道的弱点ISNUMERIC()-它可以给"数字"值,如误报.,CHAR(9),e,$和其他非数字的字符串的主机.如果你想知道某个东西是否是整数,例如,最好说:

IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END
Run Code Online (Sandbox Code Playgroud)

但即使这不是一个完整而有效的测试,因为它将为值返回true,> (2^32)-1并且对于负值将返回false.

另一个缺点ISNUMERIC()是,如果值可以转换为任何数值类型,它将返回true ,这与所有数字类型不同.通常人们测试ISNUMERIC()然后尝试将a 转换FLOAT为a SMALLINT并且转换失败.

在SQL Server 2012中,您将有一个新方法TRY_CONVERT(),NULL如果转换为指定数据类型无效,则返回该方法.


Mar*_*ero 5

你是对的,ISNUMERIC()返回一个int.您可以查看文档:ISNUMERIC()