MySQL - WHERE IN CLAUSE正则表达式匹配电话号码

时间:2013-08-01 08:42:10

标签: mysql regex

我想从用户表中搜索电话号码,它有百万条用户记录。 “用户”表将包含带或不带国家/地区代码的电话号码。

用户表格中的电话号码示例

+911111122222
3333344444
+15555566666
+917777788888
+19999900000

我将传递的输入电话号码,可能有也可能没有国家代码。我将输入100到1000个电话号码

1111122222
+913333344444
+15555566666
7777788888
9999900000

我想检索所有与国家/地区代码相匹配的电话号码的记录。

现在我正在使用它,

Select * from users WHERE phone_numer IN ("1111122222","+913333344444", "+15555566666", "7777788888", "9999900000");

它不会返回所有电话号码,我们该如何处理?

2 个答案:

答案 0 :(得分:1)

您可以检查您要测试的号码是否在数据库中的号码末尾,为此,请查看this question如何使用LIKE多个值

WHERE phone_number LIKE '%1111122222'

将同时匹配1111122222+91111122222

答案 1 :(得分:1)

select *
from users
where 
CASE WHEN phone_number like '+%' THEN SUBSTRING(phone_number,4,len(phone_number))
ELSE phone_number IN (Pass phone numbers without code)

示例:

select *
from users
where 
CASE WHEN phone_number like '+%' THEN SUBSTRING(phone_number,4,length(phone_number))
ELSE phone_number END IN 
('1111122222','3333344444', '555566666', '7777788888', '9999900000')

<强> SQL FIDDLE