Третият параметър на функцията REGEXP_SUBSTR показва позицията в целевия низ (de_desc
във вашия пример), където искате да започнете да търсите. Ако приемем, че в дадена част от низа е намерено съвпадение, това не влияе на това, което се връща.
В Oracle 11g има шести параметър на функцията, който според мен е това, което се опитвате да използвате, което показва групата за улавяне, която искате да бъде върната. Пример за правилно използване би бил:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Където е последният параметър 1
посочете номера на групата за заснемане, която искате да бъде върната. Ето връзка към документацията, която описва параметъра.
10g изглежда няма тази опция, но във вашия случай можете да постигнете същия резултат с:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
тъй като знаете, че мачът ще има точно един излишен знак в началото и края. (Алтернативно можете да използвате RTRIM и LTRIM, за да премахнете скоби от двата края на резултата.)