SQL - 您可以按数据类型进行过滤吗?

时间:2016-11-28 03:57:03

标签: sql sql-server sql-server-2012

我正在查看手机号码数据库,并试图查找错误。

例如,手机号码以' 04'开头,所以为了测试错误,我可以查询:

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

在测试错误时,我注意到一些数据包含文本。有没有一种过滤数据的方法,所以它只提供条目而不是包含某种文本和数字?即如果一个条目是' 0400000000 - John',我可以编写一个查询,在没有简单的试错的情况下进行选择吗?

由于

2 个答案:

答案 0 :(得分:3)

您可以使用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

答案 1 :(得分:2)

您可以尝试ISNUMERIC()函数

where ISNUMERIC (Names.Phone_M) = 1 -- should match valid numbers

where ISNUMERIC (Names.Phone_M) = 0 -- should match invalid numbers