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

So teilen Sie eine Zeichenfolge in Oracle

Problem:

Sie möchten einen String in Oracle aufteilen.

Beispiel:

Sie haben einen Satz und möchten ihn durch das Leerzeichen trennen.

Lösung:

SELECT
REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) AS parts
FROM dual
CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL;

Die Ergebnistabelle sieht folgendermaßen aus:

Teile
Ein
Beispiel
Satz.

Diskussion:

Um Teilstrings aus einem String zu erhalten, können Sie die eingebaute Funktion REGEXP_SUBSTR() von Oracle verwenden. Es benötigt vier Argumente:

  • Die Zeichenfolge, in der nach einer Teilzeichenfolge gesucht werden soll.
  • Der reguläre Ausdruck; das Muster, das Sie finden möchten.
  • Die Position, an der Sie mit der Suche nach dem Muster beginnen möchten (der Standardwert ist 1, was bedeutet, dass Sie am Anfang der Zeichenfolge beginnen).
  • Die Zahl, die angibt, welches Vorkommen der übereinstimmenden Teilzeichenfolge Sie sehen möchten (der Standardwert ist 1 , was bedeutet, dass der erste passende Teilstring angezeigt werden soll).

In unserem Beispiel lautet die zu suchende Zeichenfolge 'An example sentence. ' In der Zeichenfolge suchen Sie nach Teilzeichenfolgen, die Wörter sind, die wir hier als beliebige Gruppen beliebiger Zeichen außer Leerzeichen definieren. Deshalb geben wir das Muster '[^ ]+ an ', d. h. eine beliebige Folge von Nicht-Leerzeichen. [^ ] steht für ein beliebiges Zeichen außer Leerzeichen und + Zeichen steht für ein oder mehrere Vorkommen solcher Zeichen. Das dritte Argument sollte der Standardwert sein (1 ), da Sie von Anfang an in der gesamten Zeichenfolge nach Wörtern suchen möchten. Das letzte Argument ist das kniffligste – Sie müssen seinen Wert für jede zu durchsuchende Zeichenfolge ändern. Es sollte Ebene sein – eine Pseudospalte, die in hierarchischen Abfragen mit CONNECT BY verfügbar ist – was in unserem Fall gleich der Zeilennummer der aktuellen Zeile im Ergebnis ist, wenn CONNECT BY verwendet wird. Sie haben also:

REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level)

Dieser Ausdruck sollte aus dual ausgewählt werden – eine Pseudotabelle, die in Oracle verwendet wird, wenn Sie nicht aus einer tatsächlichen Tabelle auswählen. Dann sollten Sie CONNECT BY den Operator für hierarchische Abfragen, unter der Bedingung, dass die abgerufene Teilzeichenfolge nicht NULL sein darf . Die abgerufene Teilzeichenfolge ist NULL, sobald alle Wörter abgerufen wurden; die hierarchische Abfrage stoppt dann die Ausführung. Sie haben also:

FROM dual CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL

Sie können hier über Level und CONNECT BY lesen.

Wenn Sie die Zeichenfolge durch ein anderes Trennzeichen teilen möchten, können Sie die Abfrage einfach ändern. Wenn Sie beispielsweise die Zeichenfolge durch das Komma teilen möchten, ändern Sie '[^ ] +' bis '[^,]+ '. Hier ist eine Beispielabfrage:

SELECT REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) AS parts
FROM dual CONNECT BY REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) IS NOT NULL;