MySQL Row Data 逐字拆解(stored procedure)

目前需求
假設地址
“台中市沙鹿區六路里六路一街30號”
前面有將地址拆分並放到各自欄位
但是某些特殊情況 像是上面的例子
依目前思路
會變成 台中市,沙鹿區,六路,里,六路,一街
期望的是 台中市,沙鹿區,六路里,六路一街,30號
因目前使用到stored procedure
後面的想法是能否
逐row逐字拆解判斷存到variable
有個mask ex: [縣,市,鄉,鎮,區,里,路,段,號,樓]

思路過程:
使用while迴圈及char_length自段長度,substr判斷該字元
以上面的例子
第一次為 “台” 沒有在mask裡面 則將字元放置variable里
第二次為 “中” 沒有在mask裡面 一樣將字元放置variable里
第三次為 “市” 有在mask裡面 而且 目前variable的長度大於等於3 (因為即使在特殊的路或縣市 依台灣來說 不會有兩個字的)
做完清空variable並放置到對應的欄位
直到判斷到六路里的六
“六”沒有在mask裡面 將字元放置variable裡面
“路”有在mask裡面 且目前variable長度不足 所以繼續
“里” 有在mask裡面 且variable長度足夠
一樣放置到對應欄位 然後清空variable

    declare i int default 1;
    declare tmp char(80) default "";
    select @STRlen := char_length(`計算地址`) from addr;
    loop_name:loop 
        if i > @STRlen  then-- 迴圈開始
            leave loop_name;
        end if;
        SELECT @str := SUBSTR(`計算地址`, i, 1) from addr;
        set tmp = CONCAT(tmp,@str);
        if  @str in ('縣',"市","鄉","鎮","區","路","街","段","巷","弄","號","樓") and char_length(tmp) > 2 then
             select tmp;
             set tmp = "";
        end if;

        set i = i  + 1;
    end loop loop_name; -- 迴圈结束
    select tmp,@str; -- 印出結果 

目前寫法可以判斷縣市鄉鎮區 並存到tmp裡面
只是不知道怎麼update到個別欄位

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!