我有两张桌子。
第一个表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)
答案 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)等案件。