作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何在 SQL 中使用 IsNumeric,它与 VBScript 有点不同,但我认为我能够绕过它,即:
IF 1 = ISNUMERIC('5675754674')
BEGIN
...
END
这是解决这个问题的方法吗?我真正想做的是:
IF ISNUMERIC('5675754674')
BEGIN
...
END
但这会产生错误。示例 1 似乎可行,但只是确保我做得正确,无法在网上找到任何关于它的好的资源。
最佳答案
SQL Server 中没有 bool 值
。这意味着您不能只说IF(表达式)
;您必须将其与某些内容进行比较,因为它确实会返回 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。
关于sql-server - 使用 IF IsNumeric 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286152/
我是一名优秀的程序员,十分优秀!