Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak pobrać ciąg wielokrotnego dopasowania za pomocą wyrażenia regularnego?

Jeśli chcesz, aby wszystkie były jednym ciągiem w wierszu nie ma potrzeby używania wyrażeń regularnych można użyć standardowego REPLACE() :

SQL> select replace('2711393|2711441|1234567', '|', ', ') from dual;

REPLACE('2711393|2711441|
-------------------------
2711393, 2711441, 1234567

Jeśli chcesz je wszystkie w jednej kolumnie, musisz użyć CONNECT BY jak pokazuję tutaj . Należy pamiętać, że jest to wysoce nieefektywne.

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>

Jeśli chcesz umieścić je w różnych kolumnach, użyj PIVOT i musisz wiedzieć, ile masz. zakładam, że 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>

Jak widać, wszystko to jest okropne i, poza pierwszym, bardzo nieefektywne. Powinieneś prawidłowo znormalizować swoją bazę danych, aby upewnić się, że nie musisz tego robić.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server odpowiednik zbiorczego zbierania danych w Oracle

  2. Kroki synchronizacji trybu gotowości z podstawową bazą danych w Oracle

  3. ORACLE - regexp_substr zwraca wartości null

  4. Złożony klucz podstawowy / pytanie dotyczące klucza obcego Oracle

  5. Jak zachować treść odpowiedzi na odpowiedzi inne niż 200 w Oracle UTL_HTTP?