我想知道如何在SQL中使用IsNumeric,它与VBScript有点不同,但是我认为我能够解决它,即:
IF 1 = ISNUMERIC('5675754674')
BEGIN
...
END
这可以解决吗?我真正想做的是:
IF ISNUMERIC('5675754674')
BEGIN
...
END
但这给出了一个错误。示例1似乎可以正常工作,但是仅确保我在正确执行此操作,就无法在线找到任何有关它的良好资源。
最佳答案
SQL Server中没有boolean
。这意味着您不能只说IF (expression)
;您必须将其与某些内容进行比较,因为它确实会返回true
或false
,其含义与您可能在其他语言中惯用的含义相同。
只是一个首选项,但是我更喜欢这样写:
IF ISNUMERIC('5675754674') = 1
BEGIN
...
END
在第二个示例中,SQL Server中无法避免与1的比较。
另外,您应该意识到
ISNUMERIC()
的弱点-它可能会给“数值”值(例如.
,CHAR(9)
,e
,$
和许多其他非数字字符串。例如,如果您想知道某物是否为整数,最好说:IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END
但是,即使那样也不是完整有效的测试,因为对于值
> (2^32)-1
,它将返回true;对于负值,它将返回false。ISNUMERIC()
的另一个缺点是,如果可以将值转换为任何数字类型(与所有数字类型都不相同),它将返回true。人们经常测试ISNUMERIC()
,然后尝试将FLOAT
强制转换为SMALLINT
,而转换失败。在SQL Server 2012中,您将有一个名为
TRY_CONVERT()
的新方法,如果对指定数据类型的转换无效,则该方法将返回NULL
。