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ử một kết hợp được tìm thấy trong phần đã cho của chuỗi, nó không ảnh hưởng đến những gì được trả về.
Trong Oracle 11g, có 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 chụp bạn muốn trả lại. Ví dụ về sử dụng hợp lý sẽ là:
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;
Trường hợp thông số cuối cùng 1
cho biết số lượng nhóm chụp bạn muốn trả về.
10g không xuất hiện để 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
);
kể từ khi bạn biết rằng một trận đấu sẽ có chính xác một nhân vật dư thừa vào lúc bắt đầu và kết thúc. (Ngoài ra, bạn có thể sử dụng RTRIM và LTRIM để xóa các dấu ngoặc từ cả hai đầu của kết quả.)
Nguồn
2011-10-13 19:05:33
Điều tuyệt vời là thông số thứ 6 không được đề cập trong tài liệu chính thức của REGEXP_SUBSTR của Oracle. Cảm ơn bạn đã chỉ ra nó tồn tại. –