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)
Brug af SUBSTR(string, start, length)
vi har følgende argumenter:
For A:
- strengen til at søge
- 1 som
start
og - (indeks_af_den_første_bindestreg - 1) som
length
.INSTR(string, searchfor)
giver os indekset for den første bindestreg
For B:
Brug af SUBSTR(string, start)
vi har argumenter:
- strengen til at søge
- (indeks_af_sidste_bindestreg + 1) - denne gang bruger vi den ekstra
INSTR(string, searchfor, startindex)
argumentstartindex
og sæt den til -1; dette får den til at søge fra slutningen af strengen og arbejde baglæns, hvilket giver os indekset for den sidste bindestreg
Vi behøver ikke et længdeargument - SUBSTR uden længde returnerer resten af strengen til slutningen
Det er vigtigt at bemærke, at INSTR med et startindeks på -1 søger baglæns, men det returnerer altid indekset fra begyndelsen af strengen, ikke slutningen.
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