Oracle
 sql >> Database >  >> RDS >> Oracle

Come ottenere l'ennesima stringa in qualsiasi parola o frase generica con un delimitatore di spazio

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 )