我想知道如何在SQL中使用则IsNumeric,这是从VBScript有点不同,但我想我能避开它,即:使用IF则IsNumeric作为参数
IF 1 = ISNUMERIC('5675754674')
BEGIN
...
END
请问这是一种方式周围?我真正想要做的是:
IF ISNUMERIC('5675754674')
BEGIN
...
END
但是,这给出了一个错误。示例1似乎可行,但只要确保我正确地做到这一点,就无法在网上找到任何有用的资源。
我想知道如何在SQL中使用则IsNumeric,这是从VBScript有点不同,但我想我能避开它,即:使用IF则IsNumeric作为参数
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,它会返回负假值。
另一个缺点ISNUMERIC()
是,它会返回真,如果该值可以被转换为数值类型,这是不一样的所有数字类型的任何。通常人们测试ISNUMERIC()
,然后尝试将FLOAT
投射到SMALLINT
,转换失败。
在SQL Server 2012中,您将有一个名为TRY_CONVERT()
的新方法,如果转换为指定的数据类型无效,则返回NULL
。
你说得对,ISNUMERIC()返回一个int。 您可以查看文档:ISNUMERIC()
SQL中的IF
声明要求IF
后一个布尔表达式 - 见the MSDN reference here.
SQL是不是在处理类型之间没有铸造使用类似CAST()
或CONVERT()
,这意味着int
价值ISUNUMERIC()
回报最好的只有在使用某个比较器(=,<,>等)才能产生真/假结果时,才会被解析为布尔值。
IF ISNUMERIC('5675754674') = 1
可能是用TSQL写出来的最好方法 - 它清楚地描述了'如果通过此函数运行此值返回1(可以评估为数字数据类型),然后执行此操作。'
考虑到这一点,您应该知道ISNUMERIC
只会检查您传入的值是否会评估为任何可用的数字数据类型。如果您正在运行的数据包含科学记数法或其他违规行为,这可能会导致麻烦;有关更多信息,请参阅here。