sql >> Databáze >  >> RDS >> Oracle

Převeďte řetězec s oddělovači na řádky v oracle

Riffing off tuto metodu pro rozdělení řetězce s povolením 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

Stejně jako v propojené odpovědi hledá všechny znaky, nenásytně, následované kombinací ~^ (s stříškou escapovanou, takže ~\^ ) nebo konec řádku. regexp_substr() volání také používá volitelné argumenty k určení subexpr - takže získá pouze první seskupení (.*? ) a nikoli samotný oddělovač, který je ve druhé skupině.

Pokud chcete konkrétní prvek, pak je to ještě blíže odkazovanému příspěvku:

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

REGEX
-----
C~D^E

Nebo když to děláte v proceduře, použijte dotaz typu connect-by k naplnění kolekce a poté vyberte prvek, který potřebujete, pokud se budete dívat na více než jeden.



  1. Chci obnovit databázi s jiným schématem

  2. Vytvořte kontingenční tabulku pomocí PostgreSQL

  3. Jak analyzovat stav databázových indexů

  4. Funkce pro odstranění akcentů v postgreSQL