Tham số thứ ba của hàm REGEXP_SUBSTR cho biết vị trí trong chuỗi đích (de_desc
trong ví dụ của bạn) nơi bạn muốn bắt đầu tìm kiếm. Giả sử tìm thấy một kết quả phù hợp trong phần đã cho của chuỗi, thì điều đó không ảnh hưởng đến những gì được trả về.
Trong Oracle 11g, có một tham số thứ sáu cho hàm mà tôi nghĩ là những gì bạn đang cố gắng sử dụng, cho biết nhóm nắm bắt mà bạn muốn trả về. Một ví dụ về cách sử dụng hợp lý sẽ là:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Nơi tham số cuối cùng 1
cho biết số lượng nhóm chụp mà bạn muốn trả lại. Đây là liên kết đến tài liệu mô tả tham số.
10g dường như không có tùy chọn này, nhưng trong trường hợp của bạn, bạn có thể đạt được kết quả tương tự với:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);
vì bạn biết rằng một trận đấu sẽ có chính xác một ký tự thừa ở đầu và cuối. (Ngoài ra, bạn có thể sử dụng RTRIM và LTRIM để xóa dấu ngoặc ở cả hai phần cuối của kết quả.)