PATINDEX (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse 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.
Sintaks
PATINDEX ( '%pattern%' , expression )
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 set hasilnya.
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 set hasilnya.
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 set hasilnya.
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 set hasilnya.
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 set hasilnya.
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 set hasilnya.
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)