sql >> Databasteknik >  >> RDS >> Oracle

anslut med klausul i regex_substr

"missbruket" (som Colin 't Hart uttryckte det) av connected by har ett bra syfte här:genom att använda REGEXP_SUBSTR du kan bara extrahera en av de fyra matchningarna (23,34,45,56):regexet [^,]+ matchar alla teckensekvenser i strängen som inte innehåller ett kommatecken.

Om du försöker köra:

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

du får 23 .

och om du försöker köra:

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

du får också 23 bara att vi nu också ställer in två ytterligare parametrar :börja leta i position 1 (vilket är standard) och returnera den första förekomsten.

Nu kör vi:

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

den här gången får vi 34 (andra förekomsten) och med 3 eftersom den sista parametern returnerar 45 och så vidare.

Användningen av rekursiv connected by tillsammans med level ser till att du får alla relevanta resultat (inte nödvändigtvis i den ursprungliga ordningen dock!):

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

kommer att returnera:

TOKEN
23
34
45
56

som inte bara innehåller alla 4 resultaten, utan också delar upp det i separata rader i resultatuppsättningen!

Om du ska pyssla med det - det kan ge dig en tydligare bild av ämnet.



  1. UnsatisfiedLinkError i ursprunglig metod

  2. SQL Server:Filterutgång för sp_who2

  3. Postgres-fel vid infogning - ERROR:ogiltig bytesekvens för kodning av UTF8:0x00

  4. PostgreSQL Connection Pooling med PgBouncer