Oracle
 sql >> Datenbank >  >> RDS >> Oracle

regexp_substr überspringt leere Positionen

Der regexp_substr funktioniert so:

Wenn das Vorkommen größer als 1 ist, sucht die Datenbank nach dem zweiten Vorkommen, beginnend mit dem ersten Zeichen nach dem ersten Vorkommen von Muster , und so weiter. Dieses Verhalten unterscheidet sich von der SUBSTR-Funktion, die ihre Suche nach dem zweiten Vorkommen beim zweiten Zeichen des ersten Vorkommens beginnt.

Das Muster [^|] sucht also nach NICHT-Pipes, was bedeutet, dass es aufeinanderfolgende Pipes ("||") überspringt und nach einem Nicht-Pipe-Zeichen sucht.

Sie könnten Folgendes versuchen:

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

Dies ersetzt ein "|" mit einem "| " und ermöglichen Ihnen den Abgleich nach dem Muster [^|]