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)
Използване на SUBSTR(string, start, length)
имаме следните аргументи:
За A:
- низът за търсене
- 1 като
start
и - (индекс_на_първото_тире - 1) като
length
.INSTR(string, searchfor)
ни дава индекса на първото тире
За Б:
Използване на SUBSTR(string, start)
имаме аргументи:
- низът за търсене
- (index_of_last_hyphen + 1) - този път използваме допълнителния
INSTR(string, searchfor, startindex)
аргументstartindex
и го задайте на -1; това го кара да търси от края на низа и да работи назад, давайки ни индекса на последното тире
Нямаме нужда от аргумент за дължина - SUBSTR без дължина връща останалата част от низа до края
Важно е да се отбележи, че INSTR с начален индекс -1 търси назад, но винаги връща индекса от началото на низа, а не от края.
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