Aracılığıyla paylaş


PATINDEX (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Bir desenin belirtilen ifadedeki ilk oluşumunun başlangıç konumunu veya desen bulunamazsa tüm geçerli metin ve karakter veri türlerinde sıfırı döndürür.

Transact-SQL söz dizimi kuralları

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Bulunabilecek sırayı içeren bir karakter ifadesi. Wild card karakterler kullanılabilir; ancak % karakter önce gelmeli ve kalıp takip etmelidir (ilk veya son karakterleri aradığınızda hariç). Pattern , karakter dizisi veri tipi kategorisinin bir ifadesidir. Pattern 8.000 karakterle sınırlıdır.

Note

GELENEKSEL normal ifadeler SQL Server 2022 (16.x) ve önceki sürümlerde yerel olarak desteklenmese de, çeşitli joker ifadeler kullanılarak benzer karmaşık desen eşleştirmesi gerçekleştirilebilir. Joker sözdizimiyle ilgili daha fazla detay için String operatörleri dokümantasyonuna bakınız. SQL Server 2025 (17.x)'deki düzenli ifade fonksiyonları hakkında bilgi için Düzenli ifade fonksiyonları bölümüne bakınız.

expression

Bir ifade, genellikle belirtilen desen için aranan bir sütundur. ifade , karakter dizisi veri tipi kategorisine aittir.

Dönüş türleri

ifade, varchar(max) veya nvarchar(max) veri tiplerinden isese bigint; aksi takdirde içsel.

Remarks

Eğer desen iseNULL, PATINDEX dönerNULL.

ifadesi iseNULLPATINDEX, bir hata döndürür.

için PATINDEX başlangıç konumu şeklindedir 1.

PATINDEX girişin harmanlamasını temel alarak karşılaştırmalar gerçekleştirir. Belirtilen harmanlamada karşılaştırma yapmak için, girişe açık bir harmanlama uygulamak için kullanabilirsiniz COLLATE .

Ek karakterler (Vekil çiftler)

Ek karakterlerle (SC) yapılan derlemeler kullandığınızda, dönüş değeri ifade parametresindeki herhangi bir UTF-16 vekil çiftini tek bir karakter olarak sayar. Daha fazla bilgi için bkz. Harmanlama ve Unicode desteği.

0x0000 (char(0)), Windows harmanlamalarında tanımlanmamış bir karakterdir ve içine PATINDEXeklenemez.

Examples

A. Temel PATINDEX örneği

Aşağıdaki örnek, karakterlerin başlangıç konumu için kısa bir karakter interesting datadizesini (ter) denetler.

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

Sonuç kümesi aşağıdadır.

position
--------
3

B. PATINDEX ile desen kullanma

Aşağıdaki örnek, AdventureWorks2025 veritabanındaki tablodaki sütunun Document belirli bir satırında DocumentSummary desenin ensure başladığı konumu bulur.

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

Sonuç kümesi aşağıdadır.

position
--------
64

Bir yan tümce kullanarak WHERE aranacak satırları kısıtlamazsanız, sorgu tablodaki tüm satırları döndürür ve desenin bulunduğu satırların sıfır olmayan değerlerini, desenin bulunmadığı tüm satırlar için sıfır değerini raporlar.

C. PATINDEX ile joker karakter kullanma

Aşağıdaki örnekte % ve _ joker karakterleri kullanarak desenin 'en'bulunduğu konumu ve ardından tek bir karakteri bulur ve 'ure' belirtilen dizede başlar (dizin 1'den başlar):

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

Sonuç kümesi aşağıdadır.

position
--------
8

PATINDEX gibi LIKEçalışır, böylece joker karakterlerden herhangi birini kullanabilirsiniz. Deseni yüzdeler arasında kapatmanız gerekmez. PATINDEX('a%', 'abc') 1 döndürür ve PATINDEX('%a', 'cba') 3 döndürür.

'nin LIKE aksinePATINDEX, işlevine CHARINDEX benzer bir konum döndürür.

D. PATINDEX ile karmaşık joker ifadeler kullanma

Aşağıdaki örnek, bir sayı, harf veya boşluk olmayan bir karakterin konumunu [^] kullanır.

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

Sonuç kümesi aşağıdadır.

position
--------
33

E. PATINDEX ile COLLATE kullanma

Aşağıdaki örnek, aranan ifadenin harmanlamasını açıkça belirtmek için işlevini kullanır COLLATE .

USE tempdb;
GO

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

Sonuç kümesi aşağıdadır.

position
--------
9

F. Deseni belirtmek için değişken kullanma

Aşağıdaki örnek, desen parametresine bir değer iletmek için bir değişken kullanır. Bu örnek AdventureWorks2025 veritabanını kullanıyor.

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

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

Sonuç kümesi aşağıdadır.

position
--------
22