Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Para extrair as strings específicas da string dada no 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) temos os seguintes argumentos:

Para:
  • a string a ser pesquisada
  • 1 como o start e
  • (index_of_the_first_hyphen - 1) como o length . INSTR(string, searchfor) nos dá o índice do primeiro hífen

Para B:

Usando SUBSTR(string, start) temos argumentos:
  • a string a ser pesquisada
  • o (index_of_last_hyphen + 1) - desta vez usamos o extra INSTR(string, searchfor, startindex) argumento startindex e defina-o para -1; isso faz com que ele pesquise a partir do final da string e trabalhe de trás para frente, nos dando o índice do último hífen

Não precisamos de um argumento de comprimento - SUBSTR sem comprimento retorna o resto da string para o final

É importante observar que INSTR com um índice inicial de -1 pesquisa para trás, mas sempre retorna o índice do início da string, não do 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