select
SUBSTR(s, 1, INSTR(s, '-') - 1) as a,
SUBSTR(s, INSTR(s, '-', -1) + 1) as b
from
(select 'example@sqldat.com@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
startoch - (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)argumentstartindexoch 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