Utilizzando instr
.
select substr(help, 1, instr(help,' ') - 1)
from ( select 'hello my name is...' as help
from dual )
instr(help,' ')
restituisce l'indice posizionale della prima occorrenza del secondo argomento nel primo, comprensivo della stringa che stai cercando. cioè la prima occorrenza di ' '
nella stringa 'hello my name is...'
più lo spazio.
substr(help, 1, instr(help,' ') - 1)
quindi prende la stringa di input dal primo carattere all'indice indicato in instr(...
. Quindi ne rimuovo uno in modo che lo spazio non sia incluso..
Per l'ennesima occorrenza, cambialo leggermente:
instr(help,' ',1,n)
è l'ennesimo occorrenza di ' '
dal primo carattere. Devi quindi trovare l'indice posizionale dell'indice successivo instr(help,' ',1,n + 1)
, infine calcola la differenza tra loro in modo da sapere fino a che punto andare nel tuo substr(...
. Mentre stai cercando l'ennesimo , quando n è 1 questo si rompe e devi affrontarlo, in questo modo:
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 )
Anche questo verrà suddiviso in n . Come puoi vedere, questo sta diventando ridicolo, quindi potresti prendere in considerazione l'utilizzo di regular expressions
select regexp_substr(help, '[^[:space:]]+', 1, n )
from ( select 'hello my name is...' as help
from dual )