如何连接两个表格的电话代码

时间:2014-03-26 14:00:03

标签: tsql

我有两张桌子。

第一个表tbl1:

name nvarchar(255)
number nvarchar(255)

第二张表dbo.phone_codes:

country nvarchar(255)
code nvarchar(4)

第一个查询:

Select Name, Number
from dbo.tbl1

我得到了这个结果:

User1   375xxxxxxxx
User1   7xxxxxxxxxx
User2   49xxxxxxxxx

第二个问题:

select country, code
from dbo.phone_codes

我收到了结果:

Belarus 375
Russian 7
Germany 49
Poland  48

如果我想获得此结果,我应该使用该查询:

User1   37552222222 Belarus 375
User1   77333333333 Russian 7
User2   49111111111 Germany 49

第一张表:

name - nvarchar(255)
number - nvarchar(255)

第二张表:

country - nvarchar(255)
code - nvarchar(4)

3 个答案:

答案 0 :(得分:1)

试试这个

SELECT 
 t.Name, t.Number, p.country, p.code
FROM dbo.tbl1 t
INNER JOIN dbo.phone_codes p
  ON t.Number LIKE p.code + '%'

答案 1 :(得分:0)

SELECT
    t.Name, t.Number, p.Country, p.Cpde     
FROM
    dbo.tbl1 t, dbo.phone_codes p
WHERE
    charindex(p.Code, t.Number) = 1

答案 2 :(得分:0)

假设您的电话号码和国家/地区代码仅由数字组成,不包含空格,括号,破折号或加号。你可以尝试这样的事情:

SELECT *
  FROM( 
        SELECT T.Name , 
               T.Number ,
               P.country ,
               P.code ,                    
               RANK() OVER( PARTITION BY T.Number 
                            ORDER BY ISNULL(CAST(P.code AS int), 1) DESC)RNK
          FROM
               dbo.tbl1 T LEFT JOIN dbo.phone_codes P
               ON T.Number LIKE P.Code + '%'
      )A
  WHERE A.RNK = 1;

如果您有特殊字符,则需要使用replace功能删除任何非数字字符。

排名功能用于解决百慕大(1441)和美国(1)等案件。