De derde parameter van de functie REGEXP_SUBSTR geeft de positie in de doelstring aan (de_desc
in uw voorbeeld) waar u wilt beginnen met zoeken. Ervan uitgaande dat er een overeenkomst wordt gevonden in het opgegeven gedeelte van de tekenreeks, heeft dit geen invloed op wat wordt geretourneerd.
In Oracle 11g is er een zesde parameter voor de functie, die volgens mij is wat u probeert te gebruiken, die de capture-groep aangeeft die u wilt retourneren. Een voorbeeld van correct gebruik zou zijn:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Waar de laatste parameter 1
geef het nummer aan van de capture-groep die u wilt retourneren. Hier is een link naar de documentatie die de parameter beschrijft.
10g lijkt deze optie niet te hebben, maar in jouw geval kun je hetzelfde resultaat bereiken met:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
omdat je weet dat een match precies één extra teken aan het begin en einde zal hebben. (U kunt ook RTRIM en LTRIM gebruiken om haakjes aan beide uiteinden van het resultaat te verwijderen.)