Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да извлечете низа за множество съвпадения с помощта на регулярен израз

Ако искате всичко това като единичен низ в ред тях няма нужда да използвате регулярни изрази можете да използвате стандартен 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>

Както можете да видите, всички те са напълно ужасни и, с изключение на първото, изключително неефективни. Трябва да нормализирате вашата база данни правилно, за да сте сигурни, че не се налага да правите това.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle JDBC разпределяне на памет при извличане на набор от резултати

  2. Актуализиране на таблицата на Oracle от макрос на Excel VBA с помощта на ODBC връзка

  3. заявка за игнориране на дублирани/нулеви записи

  4. Определете дали датата на Oracle е в уикенд?

  5. Как да свържете Oracle Cloud Instance с помощта на Oracle Cloud Shell?