我有一个MySQL数据库表,其中包含一个名为Country的列。有时它是一个完整的CNT名称,有时是ISO 3或ISO 2 CNT代码 - 取决于用于此表的源文件。国家/地区名称始终以大写字母( CANADA,POLAND等。)。
我需要在我的查询中添加一些语句,它可以将国家/地区名称/国家/地区ISO 3代码转换为ISO 2 CNT代码 - (CA,PL等)。
我尝试使用一个简单的解决方案:
select left (Country, 2) from tb_name
这对所有国家都没用。如果我只拿“波兰”的前两个字母,那么我会得到'PO'而不是'PL'。
我将非常感谢您的任何建议。 非常感谢你提前。 这是我在这里发表的第一篇文章...我希望,这很容易理解。如果没有,请告诉我,我会改进。 :)
非常感谢!
阿德尔
答案 0 :(得分:0)
由于列中的名称不一致,我建议使用如下所示的查找表:
countries
country_name | country_code
POLAND | PL
POL | PL
CANADA | CA
country_name
可以是主键(您可以在其他表格中添加更多名称),country_code
可以是ISO国家/地区代码。
完成此操作后,您可以在查询中使用JOIN
始终从此表中获取counry_code
。
答案 1 :(得分:0)
您需要另一张表,例如
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)
答案 2 :(得分:0)
评论太长了。
首先提取数据中的非2位数代码:
select distinct country
from t
where length(country) <> 2
group by country;
然后,将其加载到电子表格中,并将两位数代码添加到单独的列中。维基百科应该是2位数国家代码的良好来源。
然后,您可以创建一个巨大的case语句或表用于更新目的。
但是你需要从正确的任务开始。