1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| SELECT txt,
RTRIM(CASE WHEN ch0 IS NOT NULL AND LTRIM(ch0, '0123456789') IS NULL THEN TO_CHAR(TO_NUMBER(ch0)+1) ELSE ch0 END
|| CASE WHEN ch1 IS NOT NULL AND LTRIM(ch1, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch1)+1) ELSE ' '|| ch1 END
|| CASE WHEN ch2 IS NOT NULL AND LTRIM(ch2, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch2)+1) ELSE ' '|| ch2 END
||CASE WHEN ch3 IS NOT NULL AND LTRIM(ch3, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch3)+1) ELSE ' '|| ch3 END
|| CASE WHEN ch4 IS NOT NULL AND LTRIM(ch4, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch4)+1) ELSE ' '|| ch4 END
|| CASE WHEN ch5 IS NOT NULL AND LTRIM(ch5, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch5)+1) ELSE ' '|| ch5 END)
AS nouv
FROM (
SELECT txt, row_number() OVER (PARTITION BY txt ORDER BY num) num,
lead(chaine, 0) OVER (PARTITION BY txt ORDER BY num) ch0,
lead(chaine, 1) OVER (PARTITION BY txt ORDER BY num) ch1,
lead(chaine, 2) OVER (PARTITION BY txt ORDER BY num) ch2,
lead(chaine, 3) OVER (PARTITION BY txt ORDER BY num) ch3,
lead(chaine, 4) OVER (PARTITION BY txt ORDER BY num) ch4,
lead(chaine, 5) OVER (PARTITION BY txt ORDER BY num) ch5
FROM (
SELECT ROWNUM num, txt, EXTRACTVALUE(COLUMN_VALUE,'/x') AS chaine
FROM (
SELECT 'Programme 2011 diplômée 2013' txt FROM dual
UNION ALL SELECT '13' txt FROM dual
UNION ALL SELECT 'département 13 Code postaux 13100 13001' txt FROM dual
),
TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<list><x>'||REPLACE(txt,' ','</x><x>')||'</x></list>'),
'/list/x')))
))
WHERE num = 1 |
Partager