Het "misbruik" (zoals Colin 't Hart het uitdrukte) van connected by
heeft hier een goed doel:door REGEXP_SUBSTR
te gebruiken je kunt slechts één van de 4 overeenkomsten extraheren (23,34,45,56):de regex [^,]+
komt overeen met elke tekenreeks in de tekenreeks die geen komma bevat.
Als je probeert te rennen:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token"
FROM DUAL
je krijgt 23
.
en als je probeert te rennen:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM DUAL
je krijgt ook 23
alleen dat we nu ook twee extra parameters set :begin te zoeken in positie 1 (wat de standaard is), en retourneer het eerste exemplaar.
Laten we nu rennen:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM DUAL
deze keer krijgen we 34
(2e keer) en gebruik 3
aangezien de laatste parameter 45
zal retourneren enzovoort.
Het gebruik van recursieve connected by
samen met level
zorgt ervoor dat u alle relevante resultaten ontvangt (niet noodzakelijk in de oorspronkelijke volgorde!):
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
zal terugkeren:
TOKEN
23
34
45
56
die niet alleen alle 4 de resultaten bevat, maar deze ook opsplitst in afzonderlijke rijen in de resultatenset!
Als je wilt friemelen mee - het geeft je misschien een duidelijker beeld van het onderwerp.