sql >> Database >  >> RDS >> Oracle

verbind door clausule in regex_substr

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.



  1. Resultaten beperken in Oracle

  2. Top 7 databases

  3. Oracle SQL-query om alle datums van de vorige maand weer te geven

  4. Databasecorruptie voorkomen in Microsoft Access