我正在查看一个手机号码的数据库,并尝试寻找错误。
例如,手机号码以“04”开头,因此为了测试错误,我可以查询:
SELECT DISTINCT Names.Phone_M FROM Names
WHERE Names.Phone_M NOT LIKE '04%'
在测试错误时,我注意到一些数据包含文本。有没有一种方法可以过滤数据,使其只显示包含某种文本和数字的条目?例如,如果一个条目是“0400000000 - John”,我可以编写一个查询来捕获它,而不需要简单地进行试错吗?
谢谢。
我正在查看一个手机号码的数据库,并尝试寻找错误。
例如,手机号码以“04”开头,因此为了测试错误,我可以查询:
SELECT DISTINCT Names.Phone_M FROM Names
WHERE Names.Phone_M NOT LIKE '04%'
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
您可以尝试使用ISNUMERIC()函数
where ISNUMERIC(Names.Phone_M) = 1 -- 匹配有效的号码
where ISNUMERIC(Names.Phone_M) = 0 -- 匹配无效的号码