在SQL Server中检查字段是否为数字值

8

如何在包含少量字母的字段中检查数字是最有效的方式?如果可能,我想在where语句中这样做。

数据看起来会像这样:

3833N4323 32N907654 5W5840904


你正在检查字段中是否存在数字吗?你想要提取这些数字吗? - Austin Salonen
只是检查一下字段中是否有数字,然后将其中的内容全部选择。 - Todd
3个回答

21

检查一个字段中是否至少包含一个数字(已修正):

WHERE PATINDEX('%[0-9]%', field) != 0

检查一个字段中是否只包含数字:

WHERE TRY_CONVERT(field AS int) IS NOT NULL

AND PATINDEX('%[^0-9]%', pq.ReportNumber) > 1 - Todd
你在SQL Server上有REGEXP关键字吗?那是哪个版本的SQL Server? - Mark Byers
这似乎是有效的。并且 PATINDEX('%[0-9^]%',pq.ReportNumber)> 1 - Todd
2
最后一段代码将无法工作。它需要更改为 WHERE ISNUMERIC(field) = 1。 - HelloW

10
一个简单的LIKE语句就可以找到任何数字...
...WHERE LIKE '%[0-9]%'

3
select ISNUMERIC(data)

很不幸,对我来说,这个值:33465,33465,返回1(带逗号的数字,在我的情况下被视为字符串,而不是我想要允许的数字类型)。 - Pablo Camara
在我的 Microsoft SQL Server 2019 版本中,所有这些语句都返回 1:select ISNUMERIC('$'), ISNUMERIC(','), ISNUMERIC('-')。同时,select ISNUMERIC('123123123E1') -注意末尾的 E- 也返回 1。然而,ISNUMERIC('123123123F1') -现在是 F- 则返回 0。看起来你不能真正依赖这个函数。 - Steven Kuypers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接