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.