Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)

Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)

这个案列是很久以前 我面试一个家公司一个面试题 ,公司的老板是一个在 google 工作过的 工程师,后来回上海创业了,现在回想起来很有意思。


文章目录

  • Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)
  • 数据准备
  • 一、举例导入数据
  • 二 、用数学函数获取省和直辖市
  • 三、省,市,区,村,居委会(5级)
  • 总结

数据准备

我们 用2022年度全国统计用区划代码和城乡划分代码 (5级)做实例
下载全国统计用区划代码和城乡划分代码

在这里插入图片描述

先建表

CREATE TABLE `china_code` (
  `chinacode` bigint DEFAULT NULL,
  `value` varchar(100) DEFAULT NULL
) ENGINE=MyISAM ;

select * from  china_code

一、举例导入数据

insert into china_code(chinacode,value) values
('310000000000','上海市'),
('310100000000','直辖区'),
('310112000000','闵行区'),
('310112102000','七宝镇'),
('310112102042','华林路第一居委会'),
('310104000000','徐汇区'),
('310104011000','田林街道'),
('310104011033','千鹤第五居委会'),
('110000000000','北京市'),
('110100000000','直辖区'),
('110105000000','朝阳区'),
('110105009000','亚运村街道'),
('110105009057','民族园社区居民委员会'),
('230000000000','黑龙江省'),
('231100000000','黑河市'),
('231124000000','孙吴县'),
('231124100000','孙吴镇'),
('231124100218','镇南村委会'),
('510000000000','四川省'),
('513200000000','阿坝藏族羌族自治州'),
('513201000000','马尔康市'),
('513201100000','马尔康镇'),
('513201100212','查米村村民委员会')

在这里插入图片描述

二 、用数学函数获取省和直辖市

以上2个函数都是余数函数
select *  from  china_code where chinacode%1000000000=0
select *  from  china_code where mod(chinacode,1000000000)=0

在这里插入图片描述

三、省,市,区,村,居委会(5级)

select a.chinacode,a.value,b.chinacode,b.value,c.chinacode,c.value,d.chinacode,d.value,e.chinacode,e.value from  china_code a
left join china_code b on left(a.chinacode,2)=left(b.chinacode,2) 
left join china_code c on left(b.chinacode,4)=left(c.chinacode,4) 
left join china_code d on left(c.chinacode,6)=left(d.chinacode,6)
left join china_code e on left(d.chinacode,8)=left(e.chinacode,8) 
where   a.chinacode%1000000000=0 
and b.chinacode%10000000=0 and b.chinacode%1000000000!=0
and c.chinacode%1000000=0 and  c.chinacode%100000000!=0
and d.chinacode%1000=0 and   d.chinacode%1000000!=0
and e.chinacode%1000!=0

在这里插入图片描述

总结

希望这个例子对大家有帮助 ,也许其他的场景也可以使用。