Oracle
 sql >> Base de données >  >> RDS >> Oracle

regexp_substr ignore les positions vides

La regexp_substr fonctionne comme suit :

Si l'occurrence est supérieure à 1, alors la base de données recherche la deuxième occurrence en commençant par le premier caractère suivant la première occurrence du modèle , et ainsi de suite. Ce comportement est différent de la fonction SUBSTR qui commence sa recherche de la deuxième occurrence au deuxième caractère de la première occurrence.

Ainsi, le motif [^|] recherchera les canaux NON, ce qui signifie qu'il ignorera les canaux consécutifs ("||") à la recherche d'un caractère non-canal.

Vous pouvez essayer :

select trim(regexp_substr(replace('A|test||string', '|', '| '), '[^|]+', 1, 4)) from dual;

Cela remplacera un "|" avec un "| " et vous permettent de faire correspondre en fonction du modèle [^|]