Di SQL Server, Anda dapat menggunakan T-SQL PATINDEX()
berfungsi untuk menemukan pola dalam string. Secara khusus, fungsi hanya mengembalikan pertama kemunculan pola di dalam string.
Fungsi menerima dua argumen; pola, dan tali.
Anda dapat menggunakan karakter wildcard dalam pola.
Sintaks
Sintaksnya seperti ini:
PATINDEX ( '%pattern%' , expression )
Di mana pola adalah ekspresi karakter yang berisi urutan yang akan ditemukan, dan ekspresi adalah ekspresi yang akan dicari.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh cara kerjanya:
SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;
Hasil:
+----------+ | Result | |----------| | 12 | +----------+
Tanda persentase (%
) adalah karakter wildcard yang mewakili string nol karakter atau lebih.
Contoh 2 – Tidak Cocok
Inilah yang terjadi jika kami tidak menyertakan karakter wildcard:
SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;
Hasil:
+----------+ | Result | |----------| | 0 | +----------+
Meskipun, jika string lengkap cocok dengan pola tanpa wildcard, Anda akan mendapatkan kecocokan:
SELECT PATINDEX('Bob', 'Bob') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Namun, Anda tidak akan mendapatkan kecocokan jika string berisi lebih banyak karakter:
SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;
Hasil:
+----------+ | Result | |----------| | 0 | +----------+
Dalam hal ini Anda dapat menggunakan satu karakter pengganti:
SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Anda juga dapat menggunakan satu karakter pengganti di suatu tempat di tengah pola:
SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Dalam hal ini kami mendapat kecocokan karena awal dan akhir string cocok dengan awal dan akhir pola. Tentu saja, bagian tengah string juga cocok dengan bagian tengah pola, karena semua karakter lain tercakup dalam tanda persentase.
Contoh 3 – Wildcard Garis Bawah
Berikut contoh lain di mana kami memperkenalkan karakter wildcard lain:
SELECT PATINDEX('B_er', 'Beer') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Garis bawah (_
) yang merupakan karakter pengganti untuk setiap karakter tunggal. Oleh karena itu, itu hanya akan cocok jika ada tepat satu karakter di posisi itu.
Tentu saja, pola di atas bisa cocok dengan banyak string yang berbeda. Misalnya:
SELECT PATINDEX('B_er', 'Beer') AS 'Beer', PATINDEX('B_er', 'Bier') AS 'Bier', PATINDEX('B_er', 'Baer') AS 'Baer', PATINDEX('B_er', 'B er') AS 'B er';
Hasil:
+--------+--------+--------+--------+ | Beer | Bier | Baer | B er | |--------+--------+--------+--------| | 1 | 1 | 1 | 1 | +--------+--------+--------+--------+
Contoh 4 – Membandingkan _
dan %
Wildcard
Contoh ini menunjukkan perbedaan antara _
dan %
karakter pengganti.
SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';
Hasil:
+-----+-----+------+ | % | _ | __ | |-----+-----+------| | 1 | 0 | 1 | +-----+-----+------+
Garis bawah hanya cocok ketika ada tepat satu karakter di posisi itu. Untuk mencocokkan dua karakter, kita perlu menggunakan dua garis bawah.
Tanda persentase di sisi lain, cocok dengan sejumlah karakter, termasuk nol, seperti yang terlihat pada contoh berikut:
SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';
Hasil:
+-----+-----+------+ | % | _ | __ | |-----+-----+------| | 1 | 0 | 0 | +-----+-----+------+
Contoh 5 – Contoh Basis Data
Berikut ini contoh penggunaan fungsi ini dalam kueri basis data:
USE Music; SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index' FROM Albums WHERE PATINDEX('%the%', AlbumName) > 0;
Hasil:
+-------------------------+-----------------+ | AlbumName | Pattern Index | |-------------------------+-----------------| | Singing Down the Lane | 14 | | Ziltoid the Omniscient | 9 | | No Prayer for the Dying | 15 | | The Sixteen Men of Tain | 1 | +-------------------------+-----------------+
Dalam hal ini saya menggunakan WHERE
klausa untuk mengembalikan hanya album yang benar-benar cocok, bersama dengan PATINDEX()
their hasil. Jika saya menjatuhkan WHERE
klausul, semua album akan dikembalikan, terlepas dari apakah mereka cocok atau tidak.
Bagi yang tidak cocok, PATINDEX()
hasilnya akan menjadi nol.
USE Music; SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index' FROM Albums;
Hasil:
+-------------------------+-----------------+ | AlbumName | Pattern Index | |-------------------------+-----------------| | Powerslave | 0 | | Powerage | 0 | | Singing Down the Lane | 14 | | Ziltoid the Omniscient | 9 | | Casualties of Cool | 0 | | Epicloud | 0 | | Somewhere in Time | 0 | | Piece of Mind | 0 | | Killers | 0 | | No Prayer for the Dying | 15 | +-------------------------+-----------------+
Contoh 6 – Kejadian Pertama Saja
Seperti disebutkan, PATINDEX()
hanya mengembalikan pertama kemunculan pola di dalam string.
SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;
Hasil:
+----------+ | Result | |----------| | 5 | +----------+
CHARINDEX()
Fungsi
T-SQL CHARINDEX()
fungsinya mirip dengan PATINDEX()
. Namun, ada beberapa perbedaan di antara keduanya. Secara khusus, PATINDEX()
menerima karakter wildcard, tetapi bukan posisi awal. CHARINDEX()
di sisi lain menerima posisi awal, tetapi bukan karakter wildcard.