Dengan menggunakan instr
.
select substr(help, 1, instr(help,' ') - 1)
from ( select 'hello my name is...' as help
from dual )
instr(help,' ') mengembalikan indeks posisi kemunculan pertama dari argumen kedua di argumen pertama, termasuk string yang Anda cari. yaitu kemunculan pertama ' ' dalam string 'hello my name is...' tambah ruang.
substr(help, 1, instr(help,' ') - 1) kemudian mengambil string input dari karakter pertama ke indeks yang ditunjukkan dalam instr(... . Saya kemudian menghapus satu sehingga ruang tidak disertakan..
Untuk kejadian ke-n, ubah sedikit ini:
instr(help,' ',1,n) adalah n kemunculan ' ' dari karakter pertama. Anda kemudian perlu menemukan indeks posisi dari indeks berikutnya instr(help,' ',1,n + 1) , terakhir cari tahu perbedaan di antara mereka sehingga Anda tahu seberapa jauh untuk pergi di substr(... Anda . Saat Anda mencari n , ketika n adalah 1 ini rusak dan Anda harus menghadapinya, seperti:
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 )
Ini juga akan rusak di n . Seperti yang Anda lihat, ini semakin konyol sehingga Anda mungkin ingin mempertimbangkan untuk menggunakan regular expressions
select regexp_substr(help, '[^[:space:]]+', 1, n )
from ( select 'hello my name is...' as help
from dual )