Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana Fungsi PATINDEX() Bekerja di SQL Server (T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOG10() Contoh di SQL Server

  2. 3 Pertanyaan Pemantauan SQL Server untuk Ditanyakan Saat Mengambil alih Posisi DBA

  3. Bingung tentang UPDLOCK, HOLDLOCK

  4. Cara menghasilkan skrip Batasan Unik drop di Database SQL Server - Tutorial SQL Server / TSQL Bagian 99

  5. Kesalahan SQL Server 7222:"Hanya penyedia SQL Server yang diizinkan pada contoh ini"