Oracle
 sql >> Database >  >> RDS >> Oracle

Dividi Stringa per posizione del delimitatore usando Oracle SQL

Pertanto, vorrei separare la stringa dal delimitatore più lontano.

So che questa è una vecchia domanda, ma questo è un semplice requisito per il quale SUBSTR e INSTR basterebbe. REGEXP sono ancora più lenti e CPU intensivo operazioni rispetto alle vecchie funzioni subtsr e 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

Come hai detto, vuoi il più lontano delimitatore, significherebbe il primo delimitatore dal reverse .

Il tuo approccio andava bene, ma ti mancava la posizione_di_inizio in INSTR . Se start_position è negativo , il INSTR la funzione conta indietro start_position numero di caratteri dalla fine della stringa e quindi ricerca verso l'inizio della stringa.