Nếu bạn muốn tất cả những thứ này dưới dạng một chuỗi duy nhất trong một hàng chúng không cần sử dụng biểu thức chính quy, bạn có thể sử dụng một tiêu chuẩn REPLACE()
:
SQL> select replace('2711393|2711441|1234567', '|', ', ') from dual;
REPLACE('2711393|2711441|
-------------------------
2711393, 2711441, 1234567
Nếu bạn muốn tất cả những thứ này trong một cột duy nhất thì bạn cần sử dụng CONNECT BY
như tôi chứng minh tại đây
. Xin lưu ý rằng điều này rất kém hiệu quả.
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>
Nếu bạn muốn những điều này trong các cột khác nhau, bạn cần sử dụng PIVOT
và bạn sẽ cần biết mình có bao nhiêu. Tôi giả định là 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>
Như bạn có thể thấy, tất cả những thứ này đều hoàn toàn khủng khiếp và, hãy cứu cái đầu tiên, rất kém hiệu quả. Bạn nên chuẩn hóa cơ sở dữ liệu của mình một cách chính xác để đảm bảo bạn không phải làm điều này.