2

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

用户表中的示例电话号码

+911111122222
3333344444
+15555566666
+917777788888
+19999900000

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

1111122222
+913333344444
+15555566666
7777788888
9999900000

我想检索与电话号码匹配的所有记录,尽管国家代码。

现在我正在使用这个,

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

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

4

2 回答 2

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 小提琴

于 2013-08-01T08:51:14.753 回答
1

您可以只检查要测试的数字是否位于数据库中数字的末尾,为此,请查看有关如何使用LIKE多个值的问题。

WHERE phone_number LIKE '%1111122222'

将同时匹配1111122222+91111122222

于 2013-08-01T08:48:40.373 回答