1.民政部官网找到最新行政区划代码
2.打开如下所示:
3.粘贴到excel里面,如下
4.转换为sql语句,因为单引号在Excel里面是特殊字符,所以单引号用“&&”代替,F列是公式,就是将这些列拼接起来,公式为=A:A&B:B&C:C&D:D&E:E
5.将F行复制出来,并替换掉“&&” 。
6.创建表:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `tb_region`;
CREATE TABLE `tb_region` (
`id` int(6) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '代码',
`name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '名称',
`level` int(1) NOT NULL COMMENT '级别',
`parent_id` int(6) NOT NULL COMMENT '父级ID',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 820001 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '行政区划' ROW_FORMAT = Compact;
7.更新表。
根据代码的特点:(1)前两位代表省(2)中间两位代表时(3)最后两位代表区(4)省的话最后四位全为0(5)市的话最后两位全为0并且中间两位不是“00”,市的父id为代码的前两位补上"00"(6)县的代码中间两位不为“00”并且最后两位也不为"00",县的父id为该闲代码的前四位末尾补上“00”。根据这些特点查询。
一条select语句用来查看,一条update,我执行的时候不知为何update rows 为0,所以把语句都select出来导出,最后再插入才实现。
-- 省 : 查询出以"0000"结尾的id,level 为1,parent_id为0
select id ,name, 1,0 from tb_region2 where substring(id,3,2) = 00
update tb_region2 set level=1 and parent_id=0 where substring(id,3,2) = 00
-- 市:查询出中间两位!=00 且 最后两位==00 的id,设置级别也就是level为2,设置parent_id为id的前两位补上“0000”
select id, name , 2, CONCAT(substring(id,1,2),'0000') from tb_region2 where substring(id,3,2) != 00 and substring(id,5,2) = 00
update tb_region2 set level=2 and parent_id= CONCAT(substring(id,1,2),00) where substring(id,3,2) != 00 and substring(id,5,2) = 00
-- 县:查询出中间两位!=00 且 最后两位!=00 的id,设置级别也就是level为3,设置parent_id为id的前四位补上“00”
select id, name , 3, CONCAT(substring(id,1,4),'00') from tb_region2 where substring(id,3,2) != 00 and substring(id,5,2) != 00
update tb_region2 set level=3 and parent_id= CONCAT(substring(id,1,4),'00') where substring(id,3,2) != 00 and substring(id,5,2) != 00
这是我的思路,希望对大家有帮助。
这里有现成的:
2018年10月行政区划代码SQL https://blog.csdn.net/u011517638/article/details/85006230