我想知道如何在SQL中使用IsNumeric,它与VBScript有点不同,但是我认为我能够解决它,即:

 IF 1 = ISNUMERIC('5675754674')
 BEGIN
 ...
 END


这可以解决吗?我真正想做的是:

IF ISNUMERIC('5675754674')
BEGIN
...
END


但这给出了一个错误。示例1似乎可以正常工作,但是仅确保我在正确执行此操作,就无法在线找到任何有关它的良好资源。

最佳答案

SQL Server中没有boolean。这意味着您不能只说IF (expression);您必须将其与某些内容进行比较,因为它确实会返回truefalse,其含义与您可能在其他语言中惯用的含义相同。

只是一个首选项,但是我更喜欢这样写:

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

09-12 01:06
查看更多