Oracle
 sql >> Database >  >> RDS >> Oracle

Per estrarre le stringhe specifiche dalla stringa data in 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)

Usando SUBSTR(string, start, length) abbiamo i seguenti argomenti:

Per A:

  • la stringa da cercare
  • 1 come start e
  • (index_of_the_first_hyphen - 1) come length . INSTR(string, searchfor) ci dà l'indice del primo trattino

Per B:

Usando SUBSTR(string, start) abbiamo argomenti:

  • la stringa da cercare
  • the (index_of_last_hyphen + 1) - questa volta usiamo l'extra INSTR(string, searchfor, startindex) argomento startindex e impostalo su -1; questo fa cercare dalla fine della stringa e lavorare all'indietro, dandoci l'indice dell'ultimo trattino

Non abbiamo bisogno di un argomento di lunghezza - SUBSTR senza lunghezza restituisce il resto della stringa alla fine

È importante notare che INSTR con un indice iniziale di -1 esegue la ricerca all'indietro ma restituisce sempre l'indice dall'inizio della stringa, non dalla fine.

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