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