省市區 三級聯動 數據庫 代碼 (國家統計局最新代碼、包含整理步驟)


最終整理后的成果圖。

最近項目要用到 省市區 地址三級聯動。 原有的數據是老版本的。

在網上找了找,發現很多,也很雜。最終決定自己整理一份,就當練手了。

代碼源數據以 國家統計局 最新統計數據  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 吧。

話說怎么傳附件?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM