Pomocí instr
.
select substr(help, 1, instr(help,' ') - 1)
from ( select 'hello my name is...' as help
from dual )
instr(help,' ')
vrátí poziční index prvního výskytu druhého argumentu v prvním, včetně řetězce, který hledáte. tj. první výskyt ' '
v řetězci 'hello my name is...'
plus prostor.
substr(help, 1, instr(help,' ') - 1)
poté převezme vstupní řetězec od prvního znaku po index uvedený v instr(...
. Pak jeden odstraním, aby místo nebylo zahrnuto..
Pro n-tý výskyt to jen mírně změňte:
instr(help,' ',1,n)
je n-tý výskyt ' '
od prvního znaku. Potom musíte najít poziční index dalšího indexu instr(help,' ',1,n + 1)
, nakonec zjistěte rozdíl mezi nimi, abyste věděli, jak daleko zajít v substr(...
. Když hledáte n-té , když n je 1, tohle se porouchá a musíte se s tím vypořádat, takhle:
select substr( help
, decode( n
, 1, 1
, instr(help, ' ', 1, n - 1) + 1
)
, decode( &1
, 1, instr(help, ' ', 1, n ) - 1
, instr(help, ' ', 1, n) - instr(help, ' ', 1, n - 1) - 1
)
)
from ( select 'hello my name is...' as help
from dual )
To se také porouchá v n . Jak vidíte, začíná to být směšné, takže možná budete chtít zvážit použití regular expressions
select regexp_substr(help, '[^[:space:]]+', 1, n )
from ( select 'hello my name is...' as help
from dual )