PATINDEX (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Mengembalikan posisi awal kemunculan pertama pola dalam ekspresi tertentu, atau nol jika pola tidak ditemukan, pada semua tipe data teks dan karakter yang valid.
Ikon Konvensi Sintaks Transact-SQL
Sintaks
PATINDEX ( '%pattern%' , expression )
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan 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 dalam SQL Server, pencocokan pola kompleks serupa dapat dicapai dengan menggunakan berbagai ekspresi kartubebas. Lihat dokumentasi Operator String untuk detail selengkapnya tentang sintaks kartubebas.
ekspresi
Adalah ekspresi, biasanya kolom yang dicari untuk pola yang ditentukan. ekspresi adalah kategori jenis data string karakter.
Jenis Pengembalian
bigint jika ekspresi adalah jenis data varchar(max) atau nvarchar(max) ; 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 kolamen 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 Kolajeasi dan Dukungan Unicode.
0x0000 (char(0)) adalah karakter yang tidak terdefinisi dalam kolase Windows dan tidak dapat disertakan dalam PATINDEX.
Contoh
A. Contoh PATINDEX sederhana
Contoh berikut memeriksa string karakter pendek (interesting data) untuk lokasi awal karakter ter.
SELECT position = PATINDEX('%ter%', 'interesting data');
Berikut adalah tataan hasil.
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 AdventureWorks2012.
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 wildcard. Anda tidak perlu mengapit pola di 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 AdventureWorks2012.
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 (Transact-SQL)
LEN (Transact-SQL)
Tipe Data (Transact-SQL)
Fungsi String (Transact-SQL)
(Kartubebas - Karakter yang Cocok) (T-SQL)
(Kartubebas - Karakter Tidak Cocok) (T-SQL)
_ (Wildcard - Cocokkan Satu Karakter) (Transact-SQL)
Karakter persen (Wildcard - Karakter yang Cocok) (Transact-SQL)