省市区 三级联动 数据库 代码 (国家统计局最新代码、包含整理步骤) - XiaoLong.Luo
最终整理后的成果图。
最近项目要用到 省市区 地址三级联动。 原有的数据是老版本的。
在网上找了找,发现很多,也很杂。最终决定自己整理一份,就当练手了。
代码源数据以 国家统计局 最新统计数据 http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html
看到的数据 只有 代码和名称 两列数据 如:
110000 北京市
110100 市辖区
110101 东城区
去空格整理后复制到excel 表中 供导入数据库
1、首先要把地址 分出 1 、2 、3 级 代表 省、市、区 。
那么问题来了。原先想依据名称列的缩进来 进行区分,但是想想有点复杂,而且容易出错。
后来用 地区的编码规律来区分
编码为 6 个字符组成 例如:110101
首先把表结构建起来吧。
从Excel表导入数据吧,这个就不说咯
现在开始了!
如果 后4位 为”0000″ ———————是省级 1
UPDATE [region] SET level = 1 WHERE SUBSTRING(code,3,6) = \'0000\' GO
如果 后2位 为”00″ 和 等级 level 不等于1———-是市级 2
UPDATE [Test].[dbo].[region] SET [level] = 2 WHERE SUBSTRING(code,5,6) = \'00\' and ([level] <> 1 ro [level] is null) GO
备注:什么?执行了没效果? 先把 level 字段 赋值为 0 吧。
UPDATE [region]
SET level = 0
WHERE level is null
GO
其他的 ———————————–是区级 3
UPDATE [region] SET level = 3 WHERE level = 0 GO
2、现在我们来把父ID 整理出来
也是依靠地址编码 看代码就懂了啦
省级
UPDATE [region] SET parent_id = 0 WHERE level = 1 GO
市级 UPDATE a SET a.[parent_id] = b.[id] from [region] a,[region] b WHERE SUBSTRING(a.[code],1,2) = SUBSTRING(b.[code],1,2) and a.[level] = 2 and b.[level] = 1 GO
区级 UPDATE a SET a.[parent_id] = b.[id] from [region] a,[region] b WHERE SUBSTRING(a.[code],1,4) = SUBSTRING(b.[code],1,4) and a.[level] = 3 and b.[level] = 2 GO
3、整理地区全称(这个字段有必要整理出来,原因嘛,选择联动地区 获得省市区地址名称的时候 会有意外的惊喜!例如:北京市市辖区XXX区,北京市县XXX县 虽然没错 但是影响美观)
直接上代码:
UPDATE [region] SET text_full = text WHERE id = id and level = 1 GO UPDATE a SET a.text_full = b.text_full + a.text from [region] a,[region] b WHERE a.parent_id = b.id and a.[level] = 2 and b.[level] = 1 GO UPDATE a SET a.text_full = b.text_full + a.text_full from [region] a,[region] b WHERE a.parent_id = b.id and a.[level] = 3 and b.[level] = 2 GO
现在好了,看下检查下数据。会发现问题
SELECT * FROM [region] WHERE ([level] = 2) AND (text = \'县\' OR text = \'市辖区\' OR text = \'省直辖县级行政区划\')
运行上面一段语句 会发现 text_full 字段很不合理嘛。
北京市市辖区XXX区,北京市县XXX县
要解决这个问题,开启无敌模式,手动改下吧。(好在只有11行数据)
改成如下图
记得重新 生成 区级的 text_full
UPDATE a SET a.text_full = b.text_full + a.text_full from [region] a,[region] b WHERE a.parent_id = b.id and a.[level] = 3 and b.[level] = 2 GO
就到这里了。
so easy 吧。
话说怎么传附件?