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

Konwertuj rozdzielany ciąg na wiersze w Oracle

Riffing off tej metody dzielenia ciągu przy jednoczesnym dopuszczaniu wartości null:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');

REGEXP_SUBS
-----------
A
B
C~D^E

Podobnie jak w połączonej odpowiedzi, szuka dowolnych znaków, niechętnie, po których następuje kombinacja ~^ (ze znakiem ucieczki, więc ~\^ ) lub końca wiersza. regexp_substr() wywołania używają również opcjonalnych argumentów do określenia subexpr - więc pobiera tylko pierwsze grupowanie (.*? ), a nie sam ogranicznik, który znajduje się w drugiej grupie.

Jeśli potrzebujesz konkretnego elementu, to jest on jeszcze bliżej linkowanego posta:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

Lub wykonując to w procedurze, użyj zapytania connect-by, aby wypełnić kolekcję, a następnie wybierz potrzebny element, jeśli będziesz przeglądać więcej niż jeden.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12557 TNS:nie można załadować adaptera protokołu

  2. Czy powinienem indeksować kolumny klucza podstawowego w Oracle?

  3. Najpopularniejsze zapytania dotyczące klucza podstawowego w Oracle z przykładami

  4. ORA-02287:numer sekwencji jest tutaj niedozwolony

  5. Migracja danych między różnymi DBMS