如何根据前缀列表

时间:2015-05-04 18:18:19

标签: sql sql-server

我试图找出一个能够有效地让我根据前缀列表检查特定号码的查询。

我的表格结构如下所示

表1

MobileNumber
408726172
307612535
408642517
111824374

表2

Prefix
408
3076

现在您可以看到一些MobileNumber以408和307开头,Prefix表包含408和3076.有没有办法可以在不使用循环的情况下检查SELECT语句中的有效前缀?

我的想法是一个看起来像

的SQL查询
SELECT MobileNumber FROM Table1 WHERE THE FIRST PART OF THE NUMBER MATCHES ANY OF THE Prefixes in Table2

我无法理解如何做到这一点

3 个答案:

答案 0 :(得分:6)

这样的东西
SELECT Table1.MobileNumber 
  FROM Table1 
         INNER JOIN Table2 ON Table1.MobileNumber LIKE Table2.Prefix +'%'

答案 1 :(得分:3)

选择所有数字将有效/无效属性:

select 
  MobileNumber,
  case when exists (select 1 from Table_2 where MobileNumber like Prefix + '%') 
  then 1 else 0 end as IsValid
from Table_1

仅选择有效数字:

select 
MobileNumber
from Table_1
where exists (select 1 from Table_2 where MobileNumber like Prefix + '%') 

答案 2 :(得分:1)

可能另外一种方法是:

SELECT Table1.MobileNumber
FROM Table1
INNER JOIN Table2 ON LEFT(Table1.MobileNumber, LEN(Table2.Prefix)) = Table2.Prefix