欢迎光临
个人知识库,ERP、IT知识分享和应用

SQL SERVER ISNUMERIC函数判断数字不准确问题

判断字段是不是数值型字段,SQL SERVER提供了ISNUMERIC函数:

ISNUMERIC ( expression )

当输入表达式的计算结果为有效的 numeric 数据类型时,ISNUMERIC 返回 1;否则返回 0。 有效的 numeric 数据类型包括以下类型:

int numeric
bigint money
smallint smallmoney
tinyint float
decimal real

但是对于不是数字的字符(如加号 (+)、减号 (-))和有效货币符号(如美元符号 ($))字符,ISNUMERIC 也将返回 1。例子如下:

–测试数据
if not object_id(N’Tempdb..#T’) is null
drop table #T
Go
Create table #T([col] nvarchar(22))
Insert #T
SELECT ‘3’ UNION
SELECT ‘123,67.00’ UNION
SELECT ‘¥2342’ UNION
SELECT ‘$8888’ UNION
SELECT ‘+1’
Go
–测试数据结束

SELECT *
FROM #T
WHERE ISNUMERIC(#T.col) = 1

结果如下:

我们可以看到¥、$ 、,+等字符都算做了数值型,如果我们恰巧需要这种的判断,那么非常好,我们可以直接用,但是如果我们的需求是不能把这些符号算作数值型,那么就不行了,我们可以利用PATINDEX 来实现

SELECT *
FROM #T
WHERE PATINDEX(‘%[^0-9]%’, #T.col) = 0
结果如下:

如果我们还需要“+-”号这些,那么可以稍作改动:

SELECT *
FROM #T
WHERE PATINDEX(‘%[^0-9|.|-|+]%’, #T.col) = 0
结果如下:

所以我们在判断数值型时,可以根据需求选择不用ISNUMERIC函数,而是选择更符合要求的写法。
————————————————
版权声明:本文为CSDN博主「二月十六」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_28984567/article/details/79568181

未经允许不得转载:Blog.XiaoMing.Xyz » SQL SERVER ISNUMERIC函数判断数字不准确问题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址