Dlatego chciałbym oddzielić ciąg najdalszym ogranicznikiem.
Wiem, że to stare pytanie, ale jest to prosty wymóg, dla którego SUBSTR i INSTR wystarczy. REGEXP są nadal wolniejsze i intensywnie wykorzystujące procesor operacje niż stare funkcje subtsr i instr.
SQL> WITH DATA AS
2 ( SELECT 'F/P/O' str FROM dual
3 )
4 SELECT SUBSTR(str, 1, Instr(str, '/', -1, 1) -1) part1,
5 SUBSTR(str, Instr(str, '/', -1, 1) +1) part2
6 FROM DATA
7 /
PART1 PART2
----- -----
F/P O
Jak powiedziałeś, chcesz najdalej ogranicznik, oznaczałoby to pierwszy ogranicznik od rewersu .
Twoje podejście było w porządku, ale brakowało Ci pozycji startowej w INSTR . Jeśli pozycja początkowa jest ujemna , INSTR
funkcja odlicza wstecz pozycja_początkowa liczbę znaków od końca ciągu, a następnie szuka w kierunku początku ciągu.