核心方法:
SELECT LEVEL,ID,trim(REGEXP_SUBSTR(IN_DATE , '[^,]+', 1, LEVEL, 'i')) AS STR
FROM (
SELECT 'A,B,C,D' IN_DATE,'one' ID FROM dual -- A,B,C,D
) BB
CONNECT by LEVEL <= LENGTH(IN_DATE) - LENGTH(REGEXP_REPLACE(IN_DATE, ',', '')) + 1
效果如下:
当有多个单行需要处理时:
SELECT LEVEL,ID,trim(REGEXP_SUBSTR(IN_DATE , '[^,]+', 1, LEVEL, 'i')) AS STR
FROM (
SELECT 'A,B,C,D' IN_DATE,'one' ID FROM dual
union all
SELECT '4,5,6,7,8' IN_DATE,'two' ID FROM dual
) BB
CONNECT BY ID= prior ID
and prior DBMS_RANDOM.VALUE() IS NOT NULL
AND LEVEL <= LENGTH(IN_DATE) - LENGTH(REGEXP_REPLACE(IN_DATE, ',', '')) + 1
效果如下: