Di Oracle, INSTR()
fungsi mencari substring dalam string yang diberikan, dan mengembalikan bilangan bulat yang menunjukkan posisi karakter pertama dari substring ini. Jika substring tidak ditemukan, fungsi mengembalikan 0
.
INSTR()
membutuhkan setidaknya dua argumen; string, dan substring. Ia juga menerima argumen ketiga dan keempat opsional yang memungkinkan Anda menentukan posisi awal untuk mencari, dan kejadian mana yang harus dicari.
INSTR()
juga dapat dianggap sebagai sekelompok fungsi. Ada lima fungsi terpisah; INSTR()
, INSTRB()
, INSTRC()
, INSTR2()
, dan INSTR4()
. Setiap fungsi menghitung panjang dengan cara yang berbeda.
Sintaks
Sintaksnya seperti ini:
{ INSTR
| INSTRB
| INSTRC
| INSTR2
| INSTR4
}
(string , substring [, position [, occurrence ] ])
Dimana string
adalah string yang akan dicari, substring
adalah substring untuk menemukan, position
adalah posisi awal substring, dan occurrence
adalah kejadian mana yang harus ditemukan.
Fungsi menghitung panjang sebagai berikut:
Fungsi | Menghitung panjang menggunakan… |
---|---|
INSTR() | Karakter seperti yang didefinisikan oleh set karakter input, dengan karakter pertama dari string memiliki posisi 1. |
INSTRB() | Byte |
INSTRC() | Unicode karakter lengkap |
INSTR2() | poin kode UCS2 |
INSTR4() | Poin kode UCS4 |
Contoh
Berikut ini contoh dasarnya:
SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;
Hasil:
5
Dibandingkan dengan INSTRB()
Contoh ini menunjukkan bagaimana hasilnya bisa berbeda, tergantung pada fungsi spesifik mana yang Anda gunakan, dan rangkaian karakter yang terlibat.
Dalam hal ini, kami membandingkan INSTR()
dengan INSTRB()
:
SELECT
INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR,
INSTRB('Böyük yağlı pişik', 'yağlı') AS INSTRB
FROM DUAL;
Hasil:
INSTR INSTRB ________ _________ 7 9
Kita dapat melihat bahwa kedua fungsi mengembalikan dua hasil yang berbeda. Ini karena beberapa karakter dalam string ini menggunakan dua byte.
INSTR()
fungsi mengembalikan posisi seperti yang didefinisikan oleh set karakter input, sedangkan INSTRB()
fungsi mengembalikan posisi berdasarkan byte .
Jika kita kembali ke string asli, hasilnya sama antara kedua fungsi:
SELECT
INSTR('Big fat cat', 'fat') AS INSTR,
INSTRB('Big fat cat', 'fat') AS INSTRB
FROM DUAL;
Hasil:
INSTR INSTRB ________ _________ 5 5
Itu karena string ini hanya menggunakan satu byte per karakter, sehingga panjangnya dalam byte sama dengan jumlah karakter.
Posisi Awal
Berikut adalah contoh yang menentukan posisi untuk memulai pencarian:
SELECT INSTR('That fat cat', 'at', 8)
FROM DUAL;
Hasil:
11
Dalam hal ini, pencarian dimulai pada posisi 8, yaitu setelah dua kejadian pertama. Oleh karena itu, kami mendapatkan posisi pertandingan ketiga.
Tentukan Kejadian Yang Mana
Berikut adalah contoh untuk menentukan kemunculan yang akan ditemukan:
SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;
Hasil:
7
Dalam hal ini, kita mulai dari posisi 1, dan kemudian mencari kemunculan kedua dari posisi awal tersebut.
Ini dia lagi, tapi kali ini kita membandingkan tiga nilai berbeda untuk occurrence
argumen:
SELECT
INSTR('That fat cat', 'at', 1, 1) AS "o1",
INSTR('That fat cat', 'at', 1, 2) AS "o2",
INSTR('That fat cat', 'at', 1, 3) AS "o3"
FROM DUAL;
Hasil:
o1 o2 o3 _____ _____ _____ 3 7 11
Tapi inilah yang terjadi jika kita meningkatkan position
argumen:
SELECT
INSTR('That fat cat', 'at', 5, 1) AS "o1",
INSTR('That fat cat', 'at', 5, 2) AS "o2",
INSTR('That fat cat', 'at', 5, 3) AS "o3"
FROM DUAL;
Hasil:
o1 o2 o3 _____ _____ _____ 7 11 0
Dalam hal ini kita tidak mendapatkan posisi kemunculan pertama, karena letaknya sebelum posisi awal kita. Kami juga mendapatkan 0
di kolom ketiga karena tidak ada kemunculan ketiga, berdasarkan posisi awal kita.
Posisi Negatif
Menentukan nilai negatif untuk posisi menyebabkan posisi awal dihitung mundur dari akhir string, dan Oracle mencari mundur dari posisi itu:
SELECT INSTR('That fat cat', 'at', -3)
FROM DUAL;
Hasil:
7
Dan setiap kejadian yang ditentukan dihitung mundur dari posisi itu:
SELECT INSTR('That fat cat', 'at', -3, 2)
FROM DUAL;
Hasil:
3
Argumen Null
Jika salah satu (atau semua) argumen adalah null
, hasilnya null
:
SET NULL 'null';
SELECT
INSTR(null, 'f', 1, 1) AS r1,
INSTR('Coffee', null, 1, 1) AS r2,
INSTR('Coffee', 'f', null, 1) AS r3,
INSTR('Coffee', 'f', 1, null) AS r4
FROM DUAL;
Hasil:
R1 R2 R3 R4 _______ _______ _______ _______ null null null null
Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null
terjadi sebagai akibat dari SQL SELECT
penyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null
harus dikembalikan.
Jumlah Argumen Salah
Memanggil INSTR()
tanpa memberikan argumen apa pun menghasilkan kesalahan:
SELECT INSTR()
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT INSTR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Dan meneruskan terlalu banyak argumen juga menghasilkan kesalahan:
SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT INSTR('Big fat cat', 'at', 1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 38 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: