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 )