ORACLE SQL Substr Replace length 併用 , 來改變一個字串的內容 , SQL 直轄市改制

「99年12月25日起部分縣市改制為直轄市(五都升格)」
本中心所有系統需配合相關縣市的「地址變更」與「系統地址相關功能調整」
必須要把目前DB資料,全部校正,校正邏輯為
1. 新北市(原台北縣改制)
2. 臺中市(臺中市、臺中縣合併改制)
3. 臺南市(臺南市、臺南縣合併改制)
4. 高雄市(高雄市、高雄縣合併改制)
5.「鄉、鎮、市」改「區」,村改「里」,街路名稱維持不變

嗯…Substr 用來抓出一個欄位資料中的其中一部分….嘖!不夠
嗯…Replace 函數是用來改變一個字串的內容….嘖!不行
嗯…length 長度函數是用來找出一個字串的長度….咦!耶耶~
Oh Ya! 有頭緒了!

是不是該來個修改之前,修改後的比較咧!
————————————————————————————————-
UPDATE tb_company
SET address = replace(substr(address,1,3),‘台北縣’,‘新北市’) || substr(address,4,length(address))
————————————————————————————————-
before address:台北縣三芝鄉古庄村四棧橋4鄰23-2號
after address:新北市三芝鄉古庄村四棧橋4鄰23-2號
————————————————————————————————-

再來個 Oh Ya!成功啦! 來個注釋唄~
使用 UPDATE 指令,將欲更新 TB_COMPANY.ADDRESS一併更新
再者將新值填入於 SETreplace(substr(address,1,3),‘台北縣’,‘新北市’)
意指使用 replace 將我要的欄位有包含‘台北縣’的字,一併修改為‘新北市’
但是…我的欄位內如果是【台北縣三芝鄉台北縣古庄村四棧橋4鄰23-2號】
有兩個‘台北縣’怎麼辦?
沒關西!所以再加上 substr 運用不就好啦
從第一個字元開始算到第三個字元是‘台北縣’才修改為‘新北市’
但是…我的欄位依照上述修改法則後,卻只變成‘新北市’耶…怎麼辦?
還是沒關西!用 || 分隔符號與之區隔後
再加上 substr & length 就可以從第四個字元開始保留後面的字啦!
|| substr(address,4,length(address))
就完成【新北市三芝鄉古庄村四棧橋4鄰23-2號】

縣市問題就此解決啦,再來剩下的「鄉、鎮、市」改「區」唄!
是不是再來個修改之前,修改後的比較咧!

————————————————————————————————-
UPDATE tb_company
SET address = substr(address,1,3) ||replace(substr(address,4,3),‘大甲鎮’,‘大甲區’) || substr(address,7,length(address))
————————————————————————————————-
before address:新北市大甲鎮社皮路293巷115號
after address:新北市大甲區社皮路293巷115號
————————————————————————————————-

再再來個 Oh Ya!成功啦! 來個注釋唄~
使用 UPDATE 指令,將欲更新 TB_COMPANY.ADDRESS一併更新
再者將新值填入於 SETsubstr(address,1,3) ||replace(substr(address,4,3),‘大甲鎮’,‘大甲區’)
意指先使用 substr 保留第一個字元開始算到第三個字元,所以‘新北市’給予保留
再同樣使用 replace 將我要的欄位有包含‘大甲鎮’的字,一併修改為‘大甲區’
但是…我的欄位內如果是【新北市大甲鎮社皮路大甲鎮293巷115號】有兩個’大甲鎮’怎麼辦?
沒關西!所以用 || 分隔符號與之區隔後,再加上 substr 運用不就好啦
從第四個字元開始算後方三個字元是‘大甲鎮’才修改為‘大甲區’
但是…我的欄位依照上述修改法則後,卻只變成‘新北市大甲區’耶…怎麼辦?
還是沒關西!用 || 分隔符號與之區隔後,再加上 substr & length 就可以從第七個字元開始保留後面的字啦!|| substr(address,7,length(address))
也就完成【新北市大甲區社皮路293巷115號】

¥指令整理¥
————————————————————————————————-
UPDATE tb_company
SET address = replace(substr(address,1,3),‘台北縣‘,‘新北市’) || substr(address,4,length(address))
before address:台北縣三芝鄉古庄村四棧橋4鄰23-2號
after address:新北市三芝鄉古庄村四棧橋4鄰23-2號
————————————————————————————————-

————————————————————————————————-
UPDATE tb_company
SET address = substr(address,1,3) ||replace(substr(address,4,3),‘大甲鎮’,‘大甲區’) || substr(address,7,length(address))
before address:新北市大甲鎮社皮路293巷115號
after address:新北市大甲區社皮路293巷115號
————————————————————————————————-

ORACLE SQL Substr Replace length 併用 , 來改變一個字串的內容 , SQL 直轄市改制” 有 2 則迴響

    1. Dear 軒 ,
      使用 Where 加上 Between 就可以限制範圍囉
      (BETWEEN 是讓可以運用一個範圍 (range) 內抓出資料庫中的值)
      以下是SQL請參考
      ———————————————————————————————————————–
      UPDATE tb_company
      SET address = substr(address,1,3) ||replace(substr(address,4,3),‘大甲鎮’,‘大甲區’) || substr(address,7,length(address))
      where address between ‘新北市大甲鎮社皮路293巷115號’ and ‘新北市大甲鎮社皮路293巷500號’
      ———————————————————————————————————————–
      註解用法: between “欄位值1″ and “欄位值2″

發表留言