首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IF IsNumeric作为参数

使用IF IsNumeric作为参数
EN

Stack Overflow用户
提问于 2012-02-15 08:09:57
回答 3查看 23K关注 0票数 8

我想知道如何在SQL中使用IsNumeric,它与VBScript略有不同,但我认为我能够绕过它,即:

代码语言:javascript
复制
 IF 1 = ISNUMERIC('5675754674') 
 BEGIN 
 ...
 END

这会是一种绕过它的方法吗?我真正想做的是:

代码语言:javascript
复制
IF ISNUMERIC('5675754674')
BEGIN 
... 
END

但这给出了一个错误。示例1似乎可以工作,但只是为了确保我做得正确,在网上找不到任何关于它的好资源。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-15 08:14:40

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

这只是我的偏好,但我更喜欢这样写:

代码语言:javascript
复制
IF ISNUMERIC('5675754674') = 1
BEGIN
...
END

在SQL Server中,无法避免与1进行比较,如您的第二个示例所示。

另外,你应该意识到ISNUMERIC()的弱点--它会给“数值”值(如.CHAR(9)e$和许多其他非数值字符串)带来误报。例如,如果你想知道某件事是不是一个整数,最好说:

代码语言:javascript
复制
IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END

但即便如此,这也不是一个完整有效的测试,因为对于值> (2^32)-1,它将返回true,对于负值,它将返回false。

ISNUMERIC()的另一个缺点是,如果值可以转换为任何数值类型,它将返回true,这与所有数值类型并不相同。通常,人们测试ISNUMERIC(),然后尝试将FLOAT转换为SMALLINT,但转换失败。

在SQL Server2012中,您将拥有一个名为TRY_CONVERT()的新方法,如果到指定数据类型的转换无效,该方法将返回NULL

票数 17
EN

Stack Overflow用户

发布于 2012-02-15 08:14:09

您是对的,ISNUMERIC()返回一个int。您可以查看文档:ISNUMERIC()

票数 5
EN

Stack Overflow用户

发布于 2012-02-15 08:26:48

SQL中的IF语句要求在IF后面有一个布尔表达式-请参见the MSDN reference here.

在不使用CAST()CONVERT()的情况下,SQL在处理类型之间的转换方面并不是最好的,这意味着当您使用某种比较器(=、<、>等)来产生true/false结果时,ISUNUMERIC()返回的int值只会被解析为布尔值。

IF ISNUMERIC('5675754674') = 1可能是用TSQL写出来的最好的方式--它清楚地描述了“如果通过这个函数运行的这个值返回1(可以作为一个数值数据类型),那么执行这个操作”的意图。

考虑到这一点,您应该知道,ISNUMERIC只检查您传递的值是否将计算为任何可用的数字数据类型。如果您正在运行的数据包含科学记数法或其他不规则性,这可能会带来麻烦;有关更多信息,请参阅here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9286152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档