Door instr
te gebruiken
.
select substr(help, 1, instr(help,' ') - 1)
from ( select 'hello my name is...' as help
from dual )
instr(help,' ')
retourneert de positionele index van het eerste voorkomen van het tweede argument in het eerste, inclusief de tekenreeks waarnaar u zoekt. d.w.z. de eerste keer dat ' '
. voorkomt in de string 'hallo mijn naam is...'
plus de ruimte.
substr(help, 1, instr(help,' ') - 1)
neemt vervolgens de invoerreeks van het eerste teken naar de index die is aangegeven in instr(...
. Ik verwijder er dan een zodat de spatie niet wordt opgenomen..
Wijzig dit voor de zoveelste keer iets:
instr(help,' ',1,n)
is de nde voorkomen van ' '
vanaf het eerste teken. Je moet dan de positionele index van de volgende index vinden instr(help,' ',1,n + 1)
, bereken ten slotte het verschil tussen beide, zodat u weet hoe ver u moet gaan in uw substr(...
. Terwijl u op zoek bent naar de nth , wanneer n is 1 dit gaat kapot en je hebt er mee te maken, zoals zo:
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 )
Dit wordt ook afgebroken bij n . Zoals je kunt zien begint dit belachelijk te worden, dus je zou kunnen overwegen om reguliere expressies
select regexp_substr(help, '[^[:space:]]+', 1, n )
from ( select 'hello my name is...' as help
from dual )