我想知道如何在sql中使用IsNumeric,它与VBScript有点不同,但我想我能绕过它,即:
IF 1 = ISNUMERIC('5675754674') BEGIN ... END
这会是一种解决方法吗?我真正想做的是:
IF ISNUMERIC('5675754674') BEGIN ... END
但这会产生错误.示例1似乎有效,但只是确保我做得对,无法在网上找到任何好的资源.
解决方法
sql Server中没有布尔值.这意味着你不能只说IF(表达式);你必须将它与某些东西进行比较,因为它确实会像你在其他语言中习惯的那样返回真或假.
只是一个偏好,但我更喜欢这样写:
IF ISNUMERIC('5675754674') = 1 BEGIN ... END
sql Server中没有办法避免与1进行比较,如第二个示例所示.
另外,您应该注意ISNUMERIC()的弱点 – 它可以为“数字”值提供误报,例如.,CHAR(9),e,$和许多其他非数字字符串.如果你想知道某些东西是否是整数,例如,最好说:
IF '5675754674' NOT LIKE '%[^0-9]%' BEGIN ... END
但即使这不是一个完整而有效的测试,因为它将返回值为> (2 ^ 32)-1,对于负值,它将返回false.
ISNUMERIC()的另一个缺点是,如果值可以转换为任何数值类型,它将返回true,这与所有数字类型不同.通常人们测试ISNUMERIC(),然后尝试将FLOAT强制转换为SMALLINT,转换失败.
在sql Server 2012中,您将有一个名为TRY_CONVERT()
的新方法,如果转换为指定的数据类型无效,则返回NULL.