![1652680783459613.png image.png](/upload/wenda/20220516/1652680783459613.png)
SELECT A,B,WM_CONCAT(B)OVER() C
FROM (SELECT DISTINCT X.A,
--Y.COLUMN_VALUE,
--LEVEL,
CASE
WHEN Y.COLUMN_VALUE LIKE '%-%' THEN
TO_NUMBER(SUBSTR(A,
1,
7 -
LENGTH(SUBSTR(Y.COLUMN_VALUE,
1,
INSTR(Y.COLUMN_VALUE,
'-') - 1))) ||
SUBSTR(Y.COLUMN_VALUE,
1,
INSTR(Y.COLUMN_VALUE, '-') - 1)) +
LEVEL - 1
ELSE
TO_NUMBER(SUBSTR(A, 1, 7 - LENGTH(Y.COLUMN_VALUE)) ||
Y.COLUMN_VALUE)
END B
FROM (SELECT '2202192-96/98-99/200-202/204' AS A FROM DUAL) X,
TABLE(SPLIT(A, '/')) Y
CONNECT BY LEVEL <= CASE
WHEN Y.COLUMN_VALUE LIKE '%-%' THEN
TO_NUMBER(SUBSTR(A,
1,
7 -
LENGTH(SUBSTR(Y.COLUMN_VALUE,
INSTR(Y.COLUMN_VALUE, '-') + 1))) ||
SUBSTR(Y.COLUMN_VALUE,
INSTR(Y.COLUMN_VALUE, '-') + 1)) -
TO_NUMBER(SUBSTR(A,
1,
7 -
LENGTH(SUBSTR(Y.COLUMN_VALUE,
1,
INSTR(Y.COLUMN_VALUE, '-') - 1))) ||
SUBSTR(Y.COLUMN_VALUE,
1,
INSTR(Y.COLUMN_VALUE, '-') - 1)) + 1
ELSE
1
END)