将行政区划代码转换为SQL的简便做法

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值