PATINDEX (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mengembalikan posisi awal kemunculan pertama pola dalam ekspresi tertentu, atau nol jika pola tidak ditemukan, pada semua tipe data teks dan karakter yang valid.

Konvensi sintaks transact-SQL

Sintaksis

PATINDEX ( '%pattern%' , expression )  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

pola
Adalah ekspresi karakter yang berisi urutan yang akan ditemukan. Karakter kartubebas dapat digunakan; namun, karakter % harus datang sebelum dan mengikuti pola (kecuali ketika Anda mencari karakter pertama atau terakhir). pola adalah ekspresi kategori jenis data string karakter. pola dibatasi hingga 8000 karakter.

Catatan

Meskipun ekspresi reguler tradisional tidak didukung secara asli di SQL Server, pencocokan pola kompleks serupa dapat dicapai dengan menggunakan berbagai ekspresi kartubebas. Lihat dokumentasi Operator String untuk detail selengkapnya tentang sintaks kartubebas.

expression
Adalah ekspresi, biasanya kolom yang dicari untuk pola yang ditentukan. ekspresi adalah kategori jenis data string karakter.

Jenis Kembalian

bigint jika ekspresi adalah jenis data varchar(maks) atau nvarchar(maks ) ; jika tidak , int.

Keterangan

Jika pola atau ekspresi NULL, PATINDEX mengembalikan NULL.

Posisi awal untuk PATINDEX adalah 1.

PATINDEX melakukan perbandingan berdasarkan kolate input. Untuk melakukan perbandingan dalam kolamen tertentu, Anda dapat menggunakan COLLATE untuk menerapkan kolatasi eksplisit ke input.

Karakter Tambahan (Pasangan Pengganti)

Saat menggunakan kolase SC, nilai yang dikembalikan akan menghitung pasangan pengganti UTF-16 dalam parameter ekspresi sebagai satu karakter. Untuk informasi selengkapnya, lihat Dukungan Kolate dan Unicode.

0x0000 (char(0)) adalah karakter yang tidak terdefinisi dalam kolase Windows dan tidak dapat disertakan dalam PATINDEX.

Contoh

J. Contoh PATINDEX sederhana

Contoh berikut memeriksa string karakter pendek (interesting data) untuk lokasi awal karakter ter.

SELECT position = PATINDEX('%ter%', 'interesting data');  

Berikut adalah hasil yang ditetapkan.

position
--------
3

B. Menggunakan pola dengan PATINDEX

Contoh berikut menemukan posisi di mana pola ensure dimulai dalam baris DocumentSummary kolom tertentu dalam Document tabel dalam database AdventureWorks2022.

SELECT position = PATINDEX('%ensure%',DocumentSummary)  
FROM Production.Document  
WHERE DocumentNode = 0x7B40;  
GO   

Berikut adalah hasil yang ditetapkan.

position
--------  
64  

Jika Anda tidak membatasi baris yang akan dicari dengan menggunakan WHERE klausa, kueri mengembalikan semua baris dalam tabel dan melaporkan nilai bukan nol untuk baris tempat pola ditemukan, dan nol untuk semua baris di mana pola tidak ditemukan.

C. Menggunakan karakter kartubebas dengan PATINDEX

Contoh berikut menggunakan % dan _ kartubebas untuk menemukan posisi di mana pola 'en', diikuti oleh satu karakter dan 'ure' dimulai dalam string yang ditentukan (indeks dimulai pada 1):

SELECT position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');  

Berikut adalah hasil yang ditetapkan.

position
--------  
8  

PATINDEX berfungsi seperti LIKE, sehingga Anda dapat menggunakan salah satu kartubebas. Anda tidak perlu mengapit pola antara persen. PATINDEX('a%', 'abc') mengembalikan 1 dan PATINDEX('%a', 'cba') mengembalikan 3.

Tidak seperti LIKE, PATINDEX mengembalikan posisi, mirip dengan apa yang CHARINDEX dilakukan.

D. Menggunakan ekspresi kartubebas kompleks dengan PATINDEX

Contoh berikut menggunakan [^]operator string untuk menemukan posisi karakter yang bukan angka, huruf, atau spasi.

SELECT position = PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!'); 

Berikut adalah hasil yang ditetapkan.

position
--------
33

E. Menggunakan COLLATE dengan PATINDEX

Contoh berikut menggunakan COLLATE fungsi untuk secara eksplisit menentukan kolase ekspresi yang dicari.

USE tempdb;  
GO  
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;  
GO  

Berikut adalah hasil yang ditetapkan.

position
--------
9

F. Menggunakan variabel untuk menentukan pola

Contoh berikut menggunakan variabel untuk meneruskan nilai ke parameter pola . Contoh ini menggunakan database AdventureWorks2022.

DECLARE @MyValue VARCHAR(10) = 'safety';   
SELECT position = PATINDEX('%' + @MyValue + '%', DocumentSummary)   
FROM Production.Document  
WHERE DocumentNode = 0x7B40;  

Berikut adalah hasil yang ditetapkan.

position
--------  
22

Lihat Juga

LIKE (Transact-SQL)
CHARINDEX (T-SQL)
LEN (T-SQL)
Tipe Data (Transact-SQL)
Fungsi String (Transact-SQL)
(Wildcard - Karakter yang Cocok) (T-SQL)
(Wildcard - Karakter Tidak Cocok) (T-SQL)
_ (Wildcard - Cocok dengan Satu Karakter) (Transact-SQL)
Karakter persen (Wildcard - Karakter yang Cocok) (Transact-SQL)