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)
Używanie SUBSTR(string, start, length)
mamy następujące argumenty:
Dla A:
- ciąg do przeszukania
- 1 jako
start
i - (index_of_the_first_hyphen - 1) jako
length
.INSTR(string, searchfor)
daje nam indeks pierwszego łącznika
Dla B:
Używanie SUBSTR(string, start)
mamy argumenty:
- ciąg do przeszukania
- (index_of_last_hyphen + 1) - tym razem używamy dodatkowego
INSTR(string, searchfor, startindex)
argumentstartindex
i ustaw go na -1; to sprawia, że szuka od końca ciągu i działa wstecz, dając nam indeks ostatniego łącznika
Nie potrzebujemy argumentu długości — SUBSTR bez długości zwraca resztę ciągu na koniec
Należy zauważyć, że INSTR z indeksem początkowym równym -1 przeszukuje wstecz, ale zawsze zwraca indeks od początku ciągu, a nie od końca.
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