更新
可以用 split(str,seq)[num] 获取结果
想拿到行政区划各个省市区代码
先取出码值部分,再按逗号拆分
长度固定为6位,若各个值长度不等,需取到下一个逗号的index替换sunbstr中参数
需要注意的是instr找不到会有默认值,要做处理给null传值给外层函数
image.png
substring_index(string,sep,num)
string:用于截取目标字符串的字符串。可为字段,表达式等。
sep:分隔符,string存在且用于分割的字符,比如“,”、“.”等。
num:序号,为非0整数。若为整数则表示从左到右数,若为负数则从右到左数
instr( string1, string2, start_position,nth_appearance )
string1:源字符串,要在此字符串中查找。
string2:要在string1中查找的字符串 。
start_position:代表string1 的哪个位置开始查找。
此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索
如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引
nth_appearance:代表要查找第几次出现的string2.
此参数可选,如果省略,默认为 1.如果为负数系统会报错。
image.png
20240626
遇到了测试数据和脏数据 没有| 的和中文带逗号的
处理之后再直接截取就行
前提是行政区划没有0开头的,哈哈
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 '深圳市南山区粤海街道科道大楼1楼' union all
select '广东省深圳市南山区华部大楼1,2,4室') t
image.png