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

Chcete-li extrahovat konkrétní řetězce z daného řetězce v Oracle

select 
  SUBSTR(s, 1, INSTR(s, '-') - 1) as a, 
  SUBSTR(s, INSTR(s, '-', -1) + 1) as b 
from 
  (select '[email protected]@BR12340000-990' as s from dual)

Pomocí SUBSTR(string, start, length) máme následující argumenty:

Pro A:

  • řetězec k vyhledávání
  • 1 jako start a
  • (index_of_the_first_hyphen - 1) jako length . INSTR(string, searchfor) nám dává index první pomlčky

Pro B:

Pomocí SUBSTR(string, start) máme argumenty:

  • řetězec k vyhledávání
  • (index_of_last_hyphen + 1) – tentokrát použijeme navíc INSTR(string, searchfor, startindex) argument startindex a nastavte ji na -1; to umožňuje vyhledávat od konce řetězce a pracovat zpět, což nám dává index poslední pomlčky

Nepotřebujeme argument délky – SUBSTR bez délky vrátí zbytek řetězce na konec

Je důležité si uvědomit, že INSTR s počátečním indexem -1 prohledává zpětně, ale vždy vrací index od začátku řetězce, nikoli od konce.

INSTR('dddde', 'd', -1)  
       12345            -- returns 4, because d is 4 from the start
       54321            -- it does not return 2, even though d is 2 from the "start" when searching backwards


  1. Přírůstkové statistiky NEPOUŽÍVÁ nástroj Query Optimizer

  2. Různé typy timezone_type na objektu DateTime

  3. MySQL INSERT INTO ... VALUES a SELECT

  4. Abstraktní třída z UML do ER diagramu. Možný ? Jak?