Parameter ketiga dari fungsi REGEXP_SUBSTR menunjukkan posisi dalam string target (de_desc
dalam contoh Anda) di mana Anda ingin mulai mencari. Dengan asumsi kecocokan ditemukan di bagian string yang diberikan, itu tidak memengaruhi apa yang dikembalikan.
Di Oracle 11g, ada parameter keenam untuk fungsi tersebut, yang menurut saya adalah apa yang Anda coba gunakan, yang menunjukkan grup tangkapan yang ingin Anda kembalikan. Contoh penggunaan yang tepat adalah:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Dimana parameter terakhir 1
menunjukkan jumlah grup tangkapan yang ingin Anda kembalikan. Berikut ini tautan ke dokumentasi yang menjelaskan parameter.
10g tampaknya tidak memiliki opsi ini, tetapi dalam kasus Anda, Anda dapat mencapai hasil yang sama dengan:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
karena Anda tahu bahwa pertandingan akan memiliki tepat satu karakter berlebih di awal dan akhir. (Atau, Anda dapat menggunakan RTRIM dan LTRIM untuk menghapus tanda kurung dari kedua ujung hasil.)