Как уже упоминали разные люди, вы не можете сделать это с простым совпадением строк. Длина ни страны, ни кода города не является фиксированной.
Сделав это в прошлом, мы сохранили таблицу, похожую по структуре на следующую: -
+------------+---------+-------+--------------+
|country_code|area_code|country|area |
+------------+---------+-------+--------------+
|44 |1634 |UK |Medway |
|44 |20 |UK |London |
|964 |23 |Iraq |Wasit (Al Kut)|
|964 |2412 |Iraq |Unreal |
+------------+---------+-------+--------------+
Затем мы вычислили максимальную длину area_code и country_code и проверили строку, поместив ее в подстроки, начиная с максимальной длины, и двигаясь вниз, пока не нашли совпадение.
Итак, учитывая номер 441634666788
Мы начали бы с подстроки [1,7] (7 - длина самой длинной комбинации кода страны / региона), не нашли бы соответствия, затем перешли бы к [1,6] и нашли бы соответствие для Великобритании /Medway.
Не очень эффективно, но это сработало.
РЕДАКТИРОВАТЬ
Вы также можете попробовать что-то вроде этого, но вам нужно будет протестировать его с полным набором данных или, возможно, даже разбить его на отдельные страны и выбранные коды города, так как это может не очень хорошо работать с выбранной вами БД.
DECLARE @area_codes TABLE
(
country_code VARCHAR(10),
area_code VARCHAR(10),
country VARCHAR(20),
area VARCHAR(20),
match_string VARCHAR(MAX),
match_length INTEGER
)
INSERT INTO @area_codes VALUES ('44','1382','UK','Dundee', '441382%', 6)
INSERT INTO @area_codes VALUES ('44','1386','UK','Evesham', '441386%', 6)
INSERT INTO @area_codes VALUES ('44', '1', 'UK', 'Geographic numbers', '441%', 3)
DECLARE @number VARCHAR(MAX)
SET @number = '441386111111'
SELECT TOP 1 *
FROM @area_codes
WHERE @number LIKE match_string
ORDER BY match_length DESC
Вы должны поддерживать поля match_string и match_length через триггер, заботясь о том, чтобы справиться с нулевыми кодами областей и индексировать таблицу в столбце match_string.