sql >> Databasteknik >  >> RDS >> Oracle

Hur extraherar man grupp från reguljärt uttryck i Oracle?

Den tredje parametern i REGEXP_SUBSTR-funktionen indikerar positionen i målsträngen (de_desc i ditt exempel) där du vill börja söka. Förutsatt att en matchning hittas i den givna delen av strängen, påverkar det inte vad som returneras.

I Oracle 11g finns det en sjätte parameter till funktionen, som jag tror är den du försöker använda, som indikerar den fångstgrupp som du vill ha tillbaka. Ett exempel på korrekt användning skulle vara:

SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;

Där den sista parametern 1 ange numret på den fångstgrupp du vill ha tillbaka. Här är en länk till dokumentationen som beskriver parametern.

10g verkar inte ha det här alternativet, men i ditt fall kan du uppnå samma resultat med:

select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);

eftersom du vet att en matchning kommer att ha exakt ett överflödigt tecken i början och slutet. (Alternativt kan du använda RTRIM och LTRIM för att ta bort parenteser från båda ändarna av resultatet.)



  1. Hur får man tillgång till Oracle-databasen över nätverket?

  2. skalär underfråga i if-satsen Condition i PL/SQL

  3. Är ett dödläge möjligt när man uppdaterar och tar bort olika rader i en tabell?

  4. Vad jag ska välja - JSON eller SQLite?