Condividi tramite


PATINDEX (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

Restituisce la posizione iniziale della prima occorrenza di un criterio in un'espressione specificata oppure zero se il criterio non viene trovato, in tutti i tipi di dati di tipo testo e carattere validi.

Convenzioni relative alla sintassi Transact-SQL

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Espressione di caratteri che contiene la sequenza da trovare. Si possono usare personaggi jolly; tuttavia, il carattere % deve venire prima e seguire uno schema (tranne quando cerchi il primo o l'ultimo carattere). pattern è un'espressione della categoria di tipo di dati della stringa di caratteri. pattern è limitato a 8.000 caratteri.

Note

Anche se le espressioni regolari tradizionali non sono supportate in modo nativo in SQL Server 2022 (16.x) e versioni precedenti, è possibile ottenere criteri di ricerca complessi simili usando varie espressioni con caratteri jolly. Consulta la documentazione sugli operatori di stringhe per maggiori dettagli sulla sintassi delle wildcard. Per informazioni sulle funzioni di espressioni regolari in SQL Server 2025 (17.x), vedi Funzioni delle espressioni regolari.

expression

Un'espressione, tipicamente una colonna, che viene cercata per il pattern specificato. l'espressione appartiene alla categoria di tipo di dato della stringa di caratteri.

Tipi restituiti

bigint se l'espressione è dei tipi di dati varchar(max) o nvarchar(max ); altrimenti int.

Remarks

Se il pattern è NULL, PATINDEX restituisce NULL.

Se expression è NULL, PATINDEX restituisce un errore.

La posizione iniziale per PATINDEX è 1.

PATINDEX esegue confronti basati sulle regole di confronto dell'input. Per eseguire un confronto in regole di confronto specificate, è possibile usare COLLATE per applicare regole di confronto esplicite all'input.

Caratteri supplementari (coppie surrogate)

Quando si usano colazioni con caratteri supplementari (SC), il valore di ritorno conta tutte le coppie di surrogati UTF-16 nel parametro di espressione come un singolo carattere. Per ulteriori informazioni, vedere Supporto per Unicode e regole di confronto.

0x0000 (char(0)) è un carattere non definito nelle regole di confronto di Windows e non può essere incluso in PATINDEX.

Examples

A. Esempio PATINDEX di base

L'esempio seguente verifica in una stringa di caratteri breve (interesting data) la posizione iniziale dei caratteri ter.

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

Il set di risultati è il seguente.

position
--------
3

B. Usare un modello con PATINDEX

L'esempio seguente trova la posizione in cui il motivo ensure inizia in una riga specifica della DocumentSummary colonna nella Document tabella del database AdventureWorks2025.

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

Il set di risultati è il seguente.

position
--------
64

Se non si limita la ricerca delle righe usando una WHERE clausola , la query restituisce tutte le righe della tabella e segnala valori diversi da zero per le righe in cui è stato trovato il criterio e zero per tutte le righe in cui il criterio non è stato trovato.

C. Usare caratteri jolly con PATINDEX

Nell'esempio seguente vengono utilizzati i caratteri jolly % e _ per individuare la posizione iniziale del modello 'en', seguito da un carattere qualsiasi e 'ure' nella stringa specificata (l'indice comincia col valore 1):

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

Il set di risultati è il seguente.

position
--------
8

Il funzionamento di PATINDEX è uguale a quello di LIKE, pertanto è possibile utilizzare qualsiasi carattere jolly. Non è necessario racchiudere il modello tra le percentuali. PATINDEX('a%', 'abc') restituisce 1 e PATINDEX('%a', 'cba') restituisce 3.

A differenza di LIKE, PATINDEX restituisce una posizione, analogamente a CHARINDEX.

D. Usare espressioni con caratteri jolly complessi con PATINDEX

Il seguente esempio utilizza l'operatore [^]stringa per trovare la posizione di un carattere che non è un numero, una lettera o uno spazio.

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

Il set di risultati è il seguente.

position
--------
33

E. Usare COLLATE con PATINDEX

Nell'esempio seguente viene utilizzata la funzione COLLATE per specificare in modo esplicito le regole di confronto dell'espressione indicante il contesto della ricerca.

USE tempdb;
GO

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

Il set di risultati è il seguente.

position
--------
9

F. Usare una variabile per specificare il modello

Il seguente esempio utilizza una variabile per passare un valore al parametro del pattern . Questo esempio utilizza il database AdventureWorks2025.

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

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

Il set di risultati è il seguente.

position
--------
22