SQL - 你能按数据类型筛选吗?

4

我正在查看一个手机号码的数据库,并尝试寻找错误。

例如,手机号码以“04”开头,因此为了测试错误,我可以查询:

SELECT DISTINCT Names.Phone_M FROM Names
WHERE Names.Phone_M NOT LIKE '04%'

在测试错误时,我注意到一些数据包含文本。有没有一种方法可以过滤数据,使其只显示包含某种文本和数字的条目?例如,如果一个条目是“0400000000 - John”,我可以编写一个查询来捕获它,而不需要简单地进行试错吗?
谢谢。
2个回答

4
你可以使用 PATINDEX 来检查电话号码中是否包含数字以外的字符。 [^0-9] 可以找到除了 0,1,2,3,4,5,6,7,8,9 之外的任何字符。
SELECT DISTINCT Phone_M 
FROM Names
WHERE PATINDEX('%[^0-9]%',Phone_M) > 0
AND Phone_M LIKE '04%'

将上述内容推广到查找所有既可以包含数字又可以包含文本的手机,使用

SELECT DISTINCT Phone_M 
FROM Names
WHERE PATINDEX('%[^0-9]%',Phone_M) > 0
AND PATINDEX('%[0-9]%',Phone_M) > 0

2

您可以尝试使用ISNUMERIC()函数

where ISNUMERIC(Names.Phone_M) = 1 -- 匹配有效的号码

where ISNUMERIC(Names.Phone_M) = 0 -- 匹配无效的号码


太棒了,正是我想要的! - BJJ BA

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