Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Dividir String pela posição do delimitador usando Oracle SQL


Portanto, gostaria de separar a string pelo delimitador mais distante.

Eu sei que esta é uma pergunta antiga, mas este é um requisito simples para o qual SUBSTR e INSTR bastaria. REGEXP ainda são mais lentos e CPU intensivo operações do que as antigas funções 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 você disse, você quer o mais longe delimitador, significaria o primeiro delimitador do reverso .

Sua abordagem foi boa, mas estava faltando a start_position em INSTR . Se a posição_inicial for negativa , o INSTR A função conta de volta o número start_position de caracteres a partir do final da string e, em seguida, pesquisa até o início da string.