Ich verwende Oracle 11g und möchte REGEXP_SUBSTR verwenden, um alle Vorkommen für ein bestimmtes Muster zu finden. Zum Beispiel
%Vor%gibt nur die erste Übereinstimmung Ta233141 zurück, aber ich möchte die anderen Vorkommen zurückgeben, die mit der Regex übereinstimmen, was Ta233142 Ta233147 Ta233148 bedeutet.
REGEXP_SUBSTR gibt nur einen Wert zurück. Sie könnten Ihre Zeichenfolge in eine Pseudo-Tabelle umwandeln und diese dann nach Übereinstimmungen abfragen. Es gibt eine XML-basierte Methode, die mir im Moment entgeht, aber connect-by funktioniert, solange Sie nur eine Quellzeichenfolge haben:
%Vor%... gibt Ihnen:
%Vor%... und Sie können das mit einer etwas einfacheren Version Ihres ursprünglichen Musters filtern:
%Vor%Das ist nicht sehr hübsch, aber keines hält mehrere Werte in einem Feld.
Dies ist ein bisschen spät, aber ich brauchte im Grunde das gleiche und konnte kein gutes Stück finden. Ich musste eine freie Textspalte einer Tabelle für einige Begriffe suchen und sie sammeln. Da dies für andere nützlich sein könnte, habe ich eine Version basierend auf dieser Frage hinzugefügt. Während REGEXP_SUBSTR nur einen Wert zurückgibt, stellt Oracle auch einen REGEXP_COUNT zur Verfügung, um Ihnen zu sagen, wie viele übereinstimmende Elemente in einer gegebenen Zeichenfolge vorhanden sind. Daher können Sie dies mit einer Liste von Indizes zur Auswahl wie folgt verbinden (verallgemeinert für die einzelne Zeile von oben als die 'source_table'):
%Vor%Ich bin fix @Alex Poole Antwort für mehrzeilige Source-Unterstützung und für eine schnellere Ausführung:
%Vor%Quellzeilen:
%Vor%Ergebnis:
%Vor%