最终整理后的成果图。

最近项目要用到 省市区 地址三级联动。 原有的数据是老版本的。

在网上找了找,发现很多,也很杂。最终决定自己整理一份,就当练手了。

代码源数据以 国家统计局 最新统计数据  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 吧。

话说怎么传附件?

版权声明:本文为ZooBo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ZooBo/articles/4081091.html