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

connect by-Klausel in regex_substr

Der "Missbrauch" (wie Colin 't Hart es ausdrückte) von connected by hat hier einen guten Zweck:durch die Verwendung von REGEXP_SUBSTR Sie können nur eine der 4 Übereinstimmungen (23,34,45,56) extrahieren:die Regex [^,]+ entspricht jeder Zeichenfolge im String, die kein Komma enthält.

Wenn Sie versuchen zu laufen:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

Sie erhalten 23 .

und wenn Sie versuchen zu laufen:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

Sie erhalten auch 23 nur dass wir jetzt noch zwei zusätzliche Parameter setzen :Beginnen Sie mit der Suche an Position 1 (Standardeinstellung) und geben Sie das erste Vorkommen zurück.

Jetzt lass uns laufen:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

diesmal erhalten wir 34 (2. Vorkommen) und mit 3 als letzter Parameter wird 45 zurückgegeben und so weiter.

Die Verwendung von rekursivem connected by zusammen mit level stellt sicher, dass Sie alle relevanten Ergebnisse erhalten (allerdings nicht unbedingt in der ursprünglichen Reihenfolge!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

gibt zurück:

TOKEN
23
34
45
56

die nicht nur alle 4 Ergebnisse enthält, sondern sie in der Ergebnismenge auch in separate Zeilen aufteilt!

Wenn Sie fummeln damit - es könnte Ihnen eine klarere Sicht auf das Thema geben.