sql >> Base de Datos >  >> RDS >> Oracle

Para extraer las cadenas específicas de la cadena dada en 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) tenemos los siguientes argumentos:

Para A:

  • la cadena a buscar
  • 1 como el start y
  • (index_of_the_first_hyphen - 1) como la length . INSTR(string, searchfor) nos da el índice del primer guión

Para B:

Usando SUBSTR(string, start) tenemos argumentos:

  • la cadena a buscar
  • el (index_of_last_hyphen + 1) - esta vez usamos el INSTR(string, searchfor, startindex) extra argumento startindex y configúrelo en -1; esto hace que busque desde el final de la cadena y retroceda, dándonos el índice del último guión

No necesitamos un argumento de longitud - SUBSTR sin longitud devuelve el resto de la cadena hasta el final

Es importante tener en cuenta que INSTR con un índice de inicio de -1 busca hacia atrás, pero siempre devuelve el índice desde el inicio de la cadena, no desde el final.

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