Ако искате всичко това като единичен низ в ред тях няма нужда да използвате регулярни изрази можете да използвате стандартен REPLACE()
:
SQL> select replace('2711393|2711441|1234567', '|', ', ') from dual;
REPLACE('2711393|2711441|
-------------------------
2711393, 2711441, 1234567
Ако искате всичко това в една колона, тогава трябва да използвате CONNECT BY
както демонстрирам тук
. Моля, имайте предвид, че това е изключително неефективно.
SQL> select regexp_substr('2711393|2711441|1234567', '[^|]+', 1, level)
2 from dual
3 connect by regexp_substr('2711393|2711441|1234567'
4 , '[^|]+', 1, level) is not null;
REGEXP_SUBSTR('2711393|2711441|1234567','[^|]+',1,LEVEL)
--------------------------------------------------------------------------
2711393
2711441
1234567
SQL>
Ако искате тези в различни колони, трябва да използвате PIVOT
и ще трябва да знаете колко имате. Предполагам 3.
SQL> select *
2 from (
3 select regexp_substr('2711393|2711441|1234567', '[^|]+', 1, level) as a
4 , level as lvl
5 from dual
6 connect by regexp_substr('2711393|2711441|1234567'
7 , '[^|]+', 1, level) is not null
8 )
9 pivot ( max(a)
10 for lvl in (1,2,3)
11 )
12 ;
1 2 3
---------- ---------- ----------
2711393 2711441 1234567
SQL>
Както можете да видите, всички те са напълно ужасни и, с изключение на първото, изключително неефективни. Трябва да нормализирате вашата база данни правилно, за да сте сигурни, че не се налага да правите това.