Di SQL Server, Anda dapat menggunakan CHARINDEX()
fungsi atau PATINDEX()
berfungsi untuk mencari string di dalam string. Ini adalah fungsi string Transact-SQL, dan juga tersedia di database Azure.
Di permukaan, fungsi-fungsi ini tampaknya melakukan hal yang persis sama, dan dalam banyak kasus, Anda dapat menggunakan mana saja yang Anda inginkan.
Namun, ada beberapa perbedaan yang dapat menentukan fungsi mana yang Anda putuskan untuk digunakan dalam skenario tertentu. Ini dapat diringkas sebagai berikut:
PATINDEX()
memungkinkan Anda menggunakan karakter wildcard untuk mencari pola.CHARINDEX()
tidak.CHARINDEX()
menerima argumen ketiga yang memungkinkan Anda menentukan posisi awal penelusuran.PATINDEX()
tidak.
Lebih detail tentang poin-poin di bawah ini.
Definisi
Pertama, mari kita lihat definisi resmi atau fungsi masing-masing.
CHARINDEX()
- Mencari satu ekspresi karakter di dalam ekspresi karakter kedua, mengembalikan posisi awal ekspresi pertama jika ditemukan.
PATINDEX()
- Mengembalikan posisi awal kemunculan pertama pola dalam ekspresi tertentu, atau nol jika pola tidak ditemukan, pada semua tipe data teks dan karakter yang valid.
Sintaks
Dan inilah sintaks resmi dari setiap fungsi.
CHARINDEX()
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
PATINDEX()
PATINDEX ( '%pattern%' , expression )
Jadi kedua fungsi memungkinkan Anda untuk mencari ekspresi karakter, namun PATINDEX()
fungsi memungkinkan Anda untuk mencari pola . Jadi ini adalah fungsionalitas tambahan yang tidak Anda dapatkan dengan CHARINDEX()
fungsi. Dengan PATINDEX()
Anda dapat menggunakan karakter wildcard untuk menentukan pola yang akan dicari, yang bisa sangat berguna dalam beberapa situasi.
Namun, CHARINDEX()
menerima tiga argumen sedangkan PATINDEX()
hanya menerima dua. CHARINDEX()
function menerima argumen ketiga opsional yang memungkinkan Anda menentukan posisi awal pencarian. Dengan kata lain, CHARINDEX()
fungsi memungkinkan Anda untuk mengembalikan hanya kecocokan yang terjadi setelah titik tertentu dalam string.
Contoh
Berikut adalah contoh yang menunjukkan fungsionalitas tambahan yang disediakan oleh setiap fungsi.
CHARINDEX()
Di sini, saya memberikan argumen ketiga untuk menentukan posisi untuk memulai pencarian. Dalam hal ini, ia akan melewatkan kemunculan pertama Bob
dan itu akan mengembalikan posisi kemunculan kedua.
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
Hasil:
17
Jadi seperti yang disebutkan, Anda tidak dapat melakukan ini dengan PATINDEX()
karena tidak menerima parameter ketiga itu.
PATINDEX()
Sekarang inilah contoh sesuatu yang dapat Anda lakukan dengan PATINDEX()
yang tidak dapat Anda lakukan dengan CHARINDEX()
. Dalam contoh ini, kami menggunakan karakter wildcard untuk mencari pola:
SELECT PATINDEX('%b_er%', 'Bob likes beer.');
Hasil:
11
Dalam hal ini, kami menggunakan tanda persen (%
) yang merupakan karakter pengganti untuk menunjukkan bahwa sejumlah karakter dapat melanjutkan dan berhasil string pencarian kami. Kami juga menggunakan garis bawah (_
) yang merupakan karakter pengganti untuk tunggal any mana pun karakter.
Kesimpulan
Jadi saat keduanya CHARINDEX()
dan PATINDEX()
menyediakan fungsionalitas yang serupa, dan dalam banyak kasus, salah satu dapat digunakan sebagai pengganti yang lain, ada kalanya Anda perlu menggunakan satu di atas yang lain.
Secara khusus, Anda akan menggunakan CHARINDEX()
ketika Anda ingin menentukan posisi awal dalam string yang akan dicari. Dan Anda akan menggunakan PATINDEX()
kapan pun Anda perlu menentukan pola yang akan ditelusuri.