Di SQL Server, Anda dapat menggunakan T-SQL CHARINDEX()
fungsi atau PATINDEX()
berfungsi untuk mencari string di dalam string lain. Berikut adalah ikhtisar singkat dari setiap fungsi.
Fungsi CHARINDEX()
Fungsi ini menerima 3 argumen; string untuk ditemukan, string untuk dicari, dan posisi awal opsional.
CHARINDEX()
sintaksnya seperti ini:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Dimana expressionToFind adalah ekspresi yang ingin Anda temukan di string lain, dan expressionToSearch adalah string lainnya. start_locationoptional opsional dapat digunakan untuk menentukan posisi dalam expressionToSearch untuk memulai pencarian.
Perhatikan bahwa hanya posisi kemunculan pertama yang dikembalikan.
Contoh
Ini contohnya:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.');
Hasil:
1
Dalam contoh ini, argumen pertama adalah Bob
, yang berarti kita sedang mencari argumen kedua untuk Bob
. Hasilnya 1 karena itulah posisi Bob
pertama muncul di argumen kedua.
Anda mungkin juga memperhatikan bahwa Bob
sebenarnya muncul dua kali dalam string, tetapi hanya posisi kecocokan pertama yang dikembalikan.
Tidak Cocok
Jika argumen kedua tidak mengandung Bob
hasilnya akan menjadi 0
.
SELECT CHARINDEX('Kate', 'Bob likes beer. Bob also likes beef.');
Hasil:
0
Menentukan Posisi Awal
Anda dapat menentukan posisi awal untuk memulai pencarian. Ini berarti bahwa SQL Server akan melewatkan setiap kejadian yang terjadi sebelum posisi awal tersebut. Namun, hasilnya tetap dilaporkan berdasarkan posisinya di dalam string (bukan dari posisi awal).
Jika ini terdengar membingungkan, contoh berikut akan membantu:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
Hasil:
17
Jadi dalam contoh ini kita mulai mencari di posisi 16 (yang kebetulan adalah spasi sebelum Bob
ke-2 ). Hasilnya adalah kemunculan pertama Bob
dilewati, dan posisi yang kedua dikembalikan. Dan kita dapat melihat bahwa posisinya adalah 17 karakter dari awal string (walaupun hanya satu karakter dari tempat kita mulai mencari).
Sensitivitas Huruf Besar
Anda dapat secara eksplisit melakukan pencarian peka huruf besar/kecil dengan menambahkan klausa COLLATE ke pernyataan SELECT Anda:
Peka Huruf Besar-kecil
Berikut penelusuran peka huruf besar/kecil:
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS);
Hasil:
0
Ini peka huruf besar/kecil karena _CS
singkatan dari Case-Sensitive.
Peka Huruf Besar dan Kecil
Dan inilah pencarian peka huruf besar/kecil:
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS);
Hasil:
11
Ini peka huruf besar/kecil karena _CI
singkatan dari Case-Insensitive.
Fungsi PATINDEX()
PATINDEX()
function melakukan pekerjaan yang mirip dengan CHARINDEX()
. Anda pada dasarnya memiliki pilihan mana yang akan digunakan. Perbedaan utama terletak pada sintaks.
PATINDEX()
sintaks fungsi berjalan seperti ini:
PATINDEX ( '%pattern%' , expression )
Di mana pola adalah ekspresi karakter yang berisi urutan yang akan ditemukan, dan ekspresi adalah ekspresi yang akan dicari (biasanya kolom).
PATINDEX()
menerima karakter wildcard, tetapi bukan posisi awal. CHARINDEX()
di sisi lain menerima posisi awal, tetapi bukan karakter wildcard.
Contoh
Ini contohnya:
SELECT PATINDEX('%eer%', 'Bob likes beer.');
Hasil:
12
Namun, inilah yang terjadi jika kami tidak menyertakan karakter wildcard:
SELECT PATINDEX('eer', 'Bob likes beer.');
Hasil:
0
Berikut contoh lain di mana kami memperkenalkan karakter wildcard lain:
SELECT PATINDEX('%b_er%', 'Bob likes beer.');
Hasil:
11
Dalam hal ini, garis bawah (_
) yang merupakan karakter pengganti untuk setiap karakter tunggal.