一、Oracle用逗号分隔字符串列转行
Oracle用逗号分隔字符串列转行。
二、使用方法
代码如下(示例):
WITH TB_A AS
(SELECT 'A' MC, '1,2,3,4,5,6,7' DM
FROM DUAL
UNION ALL
SELECT 'B' MC, '1,2' DM
FROM DUAL)
SELECT MC, REGEXP_SUBSTR(A.DM, '[^,]+', 1, L) DM
FROM TB_A A, (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 100) B
WHERE L <= LENGTH(A.DM) - LENGTH(REPLACE(DM, ',')) + 1
ORDER BY MC, REGEXP_SUBSTR(A.DM, '[^,]+', 1, L)
因为我的使用场景不会出现需要换行数超出100的情况,所以我这里LEVEL的大小直接限制为小于100,其他不确定具体需要转换行数的可以使用:
(SELECT MAX(REGEXP_COUNT(DM, ',')) + 1 FROM TB_A)
通过获取该字符串逗号出现次数加1的方式获取可能需要的换行数
总结
Oracle用逗号分隔字符串列转行