substring_index,两个逗号多字符截取,省市区

更新
可以用 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。