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如果转换为指定数据类型无效,则返回该方法.