sql >> Database teknologi >  >> RDS >> Oracle

forbinde med klausul i regex_substr

"Misbruget" (som Colin 't Hart udtrykte det) af connected by har et godt formål her:ved at bruge REGEXP_SUBSTR du kan kun udtrække et af de 4 matches (23,34,45,56):regexet [^,]+ matcher enhver tegnsekvens i strengen, som ikke indeholder et komma.

Hvis du vil prøve at køre:

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

du får 23 .

og hvis du vil prøve at køre:

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

du får også 23 kun at vi nu også indstiller to yderligere parametre :begynd at kigge i position 1 (som er standard), og returner den første forekomst.

Lad os nu køre:

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

denne gang får vi 34 (2. forekomst) og ved at bruge 3 da den sidste parameter vil returnere 45 og så videre.

Brugen af ​​rekursiv connected by sammen med level sørger for, at du modtager alle relevante resultater (dog ikke nødvendigvis i den oprindelige rækkefølge!):

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

vil returnere:

TOKEN
23
34
45
56

som ikke kun indeholder alle 4 resultater, men også opdeler det i separate rækker i resultatsættet!

Hvis du vil fisle med det - det kan måske give dig et klarere overblik over emnet.



  1. Hvordan kan jeg opdele en lang, enkelt SQLiteOpenHelper i flere klasser, en for hver tabel

  2. Sådan benchmarker du MySQL's ydeevne ved hjælp af SysBench

  3. SQL WHERE-sætning, der matcher værdier med efterfølgende mellemrum

  4. Sådan starter, genstarter, kontrollerer du status og stopper MySQL-serveren