sql >> Databáze >  >> RDS >> Oracle

Rozdělit řetězec podle pozice oddělovače pomocí Oracle SQL

Proto bych rád oddělil řetězec nejvzdálenějším oddělovačem.

Vím, že je to stará otázka, ale toto je jednoduchý požadavek, pro který SUBSTR a INSTR by stačilo. REGEXP jsou stále pomalejší a náročné na CPU operace než staré funkce subtsr a 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 jste řekl, chcete to nejdále oddělovač, znamenalo by to první oddělovač od obráceného .

Váš přístup byl v pořádku, ale chyběla vám start_position v INSTR . Pokud je počáteční_pozice záporná , INSTR funkce zpětně počítá start_position počet znaků od konce řetězce a poté hledá směrem k začátku řetězce.



  1. Najděte délku nejdelšího řádku ve sloupci v oracle

  2. Schéma SQL serveru a výchozí schéma

  3. Neočekávaný typ proměnné vrácený Receive-Job

  4. Efektivní monitorování replikace MySQL pomocí řídicích panelů SCUMM:Část 2