更新
可以用 split(str,seq)[num] 獲取結(jié)果
想拿到行政區(qū)劃各個(gè)省市區(qū)代碼
先取出碼值部分,再按逗號(hào)拆分
長(zhǎng)度固定為6位舵鳞,若各個(gè)值長(zhǎng)度不等震檩,需取到下一個(gè)逗號(hào)的index替換sunbstr中參數(shù)
需要注意的是instr找不到會(huì)有默認(rèn)值,要做處理給null傳值給外層函數(shù)
substring_index(string,sep,num)
string:用于截取目標(biāo)字符串的字符串蜓堕】叶祝可為字段,表達(dá)式等俩滥。
sep:分隔符嘉蕾,string存在且用于分割的字符,比如“霜旧,”错忱、“.”等。
num:序號(hào)挂据,為非0整數(shù)以清。若為整數(shù)則表示從左到右數(shù),若為負(fù)數(shù)則從右到左數(shù)
instr( string1, string2, start_position,nth_appearance )
string1:源字符串崎逃,要在此字符串中查找掷倔。
string2:要在string1中查找的字符串 。
start_position:代表string1 的哪個(gè)位置開(kāi)始查找个绍。
此參數(shù)可選勒葱,如果省略默認(rèn)為1. 字符串索引從1開(kāi)始。如果此參數(shù)為正巴柿,從左到右開(kāi)始檢索
如果此參數(shù)為負(fù)凛虽,從右到左檢索,返回要查找的字符串在源字符串中的開(kāi)始索引
nth_appearance:代表要查找第幾次出現(xiàn)的string2.
此參數(shù)可選广恢,如果省略凯旋,默認(rèn)為 1.如果為負(fù)數(shù)系統(tǒng)會(huì)報(bào)錯(cuò)。
20240626
遇到了測(cè)試數(shù)據(jù)和臟數(shù)據(jù) 沒(méi)有| 的和中文帶逗號(hào)的
處理之后再直接截取就行
?? ?? 前提是行政區(qū)劃沒(méi)有0開(kāi)頭的,哈哈
select register_address,
case when instr(register_address,'|') > 0 then register_address
else
(case
when substr(register_address,1,1)+0 = 0 then concat('|',register_address)
else concat(register_address,'|') end )
end as register_address1
from
(select '190000,190300,140399' as register_address union all
select '深圳市南山區(qū)粵海街道科道大樓1樓' union all
select '廣東省深圳市南山區(qū)華部大樓1,2,4室') t