Oracle行转列和REGEXP_SUBSTR,level实例

LEO-屹铭 2025-03-11 AM 370℃ 0条
--用A分割,获取两个数组 11a22\33a 大小写敏感
SELECT REGEXP_SUBSTR('11a22A33a','[^A]+',1,level,'c') AS STR
FROM DUAL
connect by level<=5;
--用,分割,获取4个数组 1a\2b\3c\4d 大小写敏感
SELECT REGEXP_SUBSTR('1a,2b,3c,4d','[^,]+',1,level,'c') AS STR
FROM DUAL
connect by level<=5;
--循环实际长度
select regexp_count('1a,2b,3c,4d',',')+1 from dual;
--循环实际长度
select regexp_count('11a22A33a','A')+1 from dual;
--实践
-- select client_id,mobile,REGEXP_SUBSTR(ass_results,'[^,]+',1,level,'c') AS STR from tb_person_assess_record
-- connect by level<=regexp_count(ass_results,',')+1;

with t as
(select '长港路五巷' 地址,'1号' 门牌号,'建苑大厦' 小区,'马武爽' 户主,'121231' 户主身份证号, '张三123 李四3323 王五1212' 人员信息 from dual
union all
select '长港路六巷' 地址,'2号' 门牌号,'长龙苑' 小区, '张大奎' 户主,'12121' 户主身份证号, '马武123 刘贵撒3323 顺丰1212' 人员信息 from dual
)
select 地址,门牌号,小区,人数,'非' 关系,substr(人员信息,0,instr(translate(人员信息,'0123456789','0000000000'),'0')-1) 姓名,
substr(人员信息,instr(translate(人员信息,'0123456789','0000000000'),'0')) 身份证号
 from
 (select distinct   地址,门牌号,小区,level+1 人数,level,regexp_substr(人员信息,'[^ ]+',1,level) 人员信息
from t
connect BY level<=length(人员信息)-length(replace(人员信息,' ',''))+1
order by 地址,门牌号,小区,level) 
union all
select 地址,门牌号,小区,1 人数,'户主' 关系,户主 姓名,户主身份证号 身份证号 from t
order by 地址,门牌号,小区,人数;

人员信息
原始的表信息

处理后表信息
处理后的表信息。


扫描二维码,在手机上阅读!
标签: Oracle

非特殊说明,本博所有文章均为博主原创。

上一篇 做了一个奇怪的梦
下一篇 没有了

评论啦~


选择表情