Oracle
 sql >> Database >  >> RDS >> Oracle

Converti la stringa delimitata in righe in Oracle

Riffare questo metodo per dividere una stringa consentendo valori 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

Come nella risposta collegata, cerca qualsiasi carattere, non avidamente, seguito dalla combinazione di ~^ (con l'accento circonflesso, quindi ~\^ ) o fine linea. Il regexp_substr() chiama anche gli argomenti facoltativi per specificare subexpr - quindi ottiene solo il primo raggruppamento (.*? ) e non il delimitatore stesso, che si trova nel secondo raggruppamento.

Se vuoi un elemento specifico, è ancora più vicino al post collegato:

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

REGEX
-----
C~D^E

Oppure, mentre esegui questa operazione in una procedura, utilizza la query di connessione per popolare una raccolta, quindi scegli l'elemento di cui hai bisogno, se ne vedrai più di uno.