Как преобразовать 2-значные коды CNT или полные имена CNT в 3-значные коды CNT в MySQL

У меня есть таблица базы данных MySQL, содержащая столбец с именем Country. Иногда это полное имя CNT, иногда ISO 3 или ISO 2. Код CNT зависит от исходного файла, используемого для этой таблицы. Названия стран всегда пишутся прописными буквами (КАНАДА, ПОЛЬША и т. д.).

Мне нужно добавить в запрос оператор, который преобразует код страны name или страны ISO 3 в код ISO 2 CNT (CA, PL и т. д.).

Я попытался использовать простое решение:

select left (Country, 2) from tb_name

Это полезно не для всех стран. Если я возьму только первые две левые буквы из 'ПОЛЬША', то я получу 'PO' вместо 'PL'.

Я буду очень признателен за любой совет от вас.


person Adela    schedule 10.03.2017    source источник


Ответы (3)


Поскольку у вас есть несовместимые имена в столбце, я бы рекомендовал иметь таблицу поиска, подобную приведенной ниже:

countries
country_name | country_code
POLAND       | PL
POL          | PL
CANADA       | CA

country_name может быть первичным ключом (и вы можете добавить больше имен по мере их появления в другой таблице), а country_code может быть кодом страны ISO.

Как только это будет сделано, вы можете использовать JOIN в своих запросах, чтобы всегда получать counry_code из этой таблицы.

person Darshan Mehta    schedule 10.03.2017

Вам понадобится еще одна таблица, например

CuntryISO2  CountryISO3 CountryName
PL          POL         POLAND
IT          ITA         ITALY

Затем вы можете присоединиться к своему столу с этим, с таким соединением, как

on  myTab.Country = case(when length(myTab.Country) = 2 then CountryISO2
                         when length(myTab.Country) = 3 then CountryISO3
                         else CountryName end)
person Stefano Zanini    schedule 10.03.2017

Это слишком долго для комментария.

Начните с извлечения кодов, отличных от двухзначных, в ваших данных:

select distinct country
from t
where length(country) <> 2
group by country;

Затем загрузите это в электронную таблицу и добавьте двузначный код в отдельный столбец. Википедия должна быть прекрасным источником двухзначного кода страны.

Затем вы можете создать гигантский оператор case или таблицу для обновления.

Но начать нужно с правильного задания.

person Gordon Linoff    schedule 10.03.2017
comment
Не лучше ли использовать информацию из Википедии для создания таблицы в базе данных, а затем обновить там столбец? - person Juan Carlos Oropeza; 10.03.2017
comment
@JuanCarlosOropeza . . . Только если предположить, что имена правильно и полностью прописаны. - person Gordon Linoff; 11.03.2017