Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fractionner la chaîne par position de délimiteur à l'aide d'Oracle SQL

Par conséquent, je voudrais séparer la chaîne par le délimiteur le plus éloigné.

Je sais que c'est une vieille question, mais c'est une exigence simple pour laquelle SUBSTR et INSTR suffirait. REGEXP sont toujours plus lents et CPU intensif opérations que les anciennes fonctions subtsr et 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

Comme vous l'avez dit, vous voulez le plus loin délimiteur, cela signifierait le premier délimiteur de l'inverse .

Votre approche était correcte, mais il vous manquait la start_position dans INSTR . Si la start_position est négative , le INSTR la fonction compte à rebours start_position nombre de caractères à partir de la fin de la chaîne, puis recherche vers le début de la chaîne.