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)
argumentostartindex
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