Bagikan melalui


PATINDEX (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistem Platform Analitik (PDW)Titik akhir analitik SQL di Microsoft FabricGudang di Microsoft FabricDatabase SQL 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

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Ekspresi karakter yang berisi urutan yang akan ditemukan. Karakter wildcard dapat digunakan; namun, karakter % harus datang sebelum dan mengikuti pola (kecuali saat Anda mencari karakter pertama atau terakhir). Pola adalah ekspresi dari kategori tipe data string karakter. pola dibatasi hingga 8.000 karakter.

Note

Meskipun ekspresi reguler tradisional tidak didukung secara asli di SQL Server 2022 (16.x) dan versi sebelumnya, pencocokan pola kompleks serupa dapat dicapai dengan menggunakan berbagai ekspresi kartubebas. Lihat dokumentasi operator string untuk detail selengkapnya tentang sintaks karakter pengganti. Untuk informasi tentang fungsi ekspresi reguler di SQL Server 2025 (17.x), lihat Fungsi ekspresi reguler.

expression

Ekspresi, biasanya kolom yang dicari untuk pola yang ditentukan. adalah dari kategori tipe data string karakter.

Tipe pengembalian

bigint jika ekspresi adalah dari tipe data varchar(max) atau nvarchar(max); jika tidak, int.

Remarks

Jika pola adalah NULL, PATINDEX mengembalikan NULL.

Jika ekspresi adalah NULL, PATINDEX mengembalikan kesalahan.

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 Anda menggunakan kolase dengan karakter tambahan (SC), nilai yang dikembalikan menghitung pasangan pengganti UTF-16 dalam parameter ekspresi sebagai satu karakter. Untuk informasi selengkapnya, lihat Dukungan Pengurutan dan Unicode.

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

Examples

A. Contoh PATINDEX dasar

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

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

Berikut set hasilnya.

position
--------
3

B. Menggunakan pola dengan PATINDEX

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

SELECT PATINDEX('%ensure%', DocumentSummary) AS position
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 PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;

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 PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!') AS position;

Berikut set hasilnya.

position
--------
33

E. Gunakan 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 AdventureWorks2025.

DECLARE @MyValue AS VARCHAR (10) = 'safety';

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

Berikut set hasilnya.

position
--------
22