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)
Använda SUBSTR(string, start, length)
vi har följande argument:
För A:
- strängen att söka på
- 1 som
start
och - (index_of_the_first_hyphen - 1) som
length
.INSTR(string, searchfor)
ger oss indexet för det första bindestrecket
För B:
Använda SUBSTR(string, start)
vi har argument:
- strängen att söka på
- (index_of_last_hyphen + 1) - den här gången använder vi den extra
INSTR(string, searchfor, startindex)
argumentstartindex
och ställ in den på -1; detta gör att den söker från slutet av strängen och arbetar bakåt, vilket ger oss indexet för det sista bindestrecket
Vi behöver inget längdargument - SUBSTR utan längd returnerar resten av strängen till slutet
Det är viktigt att notera att INSTR med ett startindex på -1 söker bakåt men det returnerar alltid indexet från början av strängen, inte slutet.
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