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 )