sql >> Base de Datos >  >> RDS >> Oracle

Dividir cadena por posición de delimitador usando Oracle SQL

Por lo tanto, me gustaría separar la cadena por el delimitador más lejano.

Sé que esta es una vieja pregunta, pero este es un requisito simple para el cual SUBSTR y INSTR bastaría. REGEXP siguen siendo más lentos y uso intensivo de CPU operaciones que las antiguas funciones 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

Como dijiste, quieres lo más lejano delimitador, significaría el primer delimitador del reverso .

Tu enfoque estuvo bien, pero te faltaba la posición_inicial en INSTR . Si start_position es negativo , el INSTR La función cuenta hacia atrás el número de caracteres de la posición inicial desde el final de la cadena y luego busca hacia el comienzo de la cadena.