oracle逗号分割列并转成多行

发布时间 2024-01-08 17:34:27作者: systemctl1

-- 写法一
SELECT
A.*,
REGEXP_SUBSTR( A.L2UNIT_NAME, '[^,]+', 1, L ) AS L2UNIT_NAME_B,
L
FROM
JYZB_DATA_PERM A,
( SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 100 )
WHERE
L ( + ) <= LENGTH( A.L2UNIT_NAME ) - LENGTH( REPLACE ( A.L2UNIT_NAME, ',' ) ) + 1
ORDER BY
id


-- 写法二
SELECT
A.*,
REGEXP_SUBSTR( A.L2UNIT_NAME, '[^,]+', 1, L ) AS L2UNIT_NAME_B,
L
FROM
JYZB_DATA_PERM A,
( SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 100 ) --限制一下level数量,提高查询速度。否则数据较多的情况下,会一直查询不出结果
WHERE
L ( + ) <= regexp_count ( A.L2UNIT_NAME, ',' ) + 1 -- 计算需要分割后的数量
ORDER BY
id

 

 

 

5、sql分析
5.1 函数 REGEXP_SUBSTR
REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

string:需要进行正则处理的字符串
pattern:进行匹配的正则表达式
position:起始位置,从字符串的第几个字符开始正则表达式匹配(默认为1) 注意:字符串最初的位置是1而不是0
occurrence:获取第几个分割出来的组(分割后最初的字符串会按分割的顺序排列成组)
modifier:模式(‘i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’)针对的是正则表达式里字符大小写的匹配


————————————————
版权声明:本文为CSDN博主「伏加特遇上西柚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43811057/article/details/125671239