PATINDEX (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

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

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

PATINDEX ( '%pattern%' , expression )  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

pattern
Espressione di caratteri che contiene la sequenza da cercare. È possibile usare i caratteri jolly. Il carattere %, tuttavia, deve precedere e seguire pattern, tranne nelle ricerche del primo o dell'ultimo carattere. pattern è un'espressione appartenente alla categoria di tipi di dati per stringhe di caratteri. La lunghezza massima di pattern è 8000 caratteri.

Nota

Anche se le espressioni regolari tradizionali non sono supportate in modo nativo in SQL Server, è possibile ottenere una corrispondenza di modelli complessi simili usando varie espressioni con caratteri jolly. Per informazioni più dettagliate sulla sintassi con caratteri jolly, vedere la documentazione relativa agli operatori stringa.

expression
Espressione che in genere indica una colonna in cui viene cercato il modello specificato. expression appartiene alla categoria di tipi di dati per stringhe di caratteri.

Tipi restituiti

bigint se expression è del tipo di dati varchar(max) o nvarchar(max), in caso contrario int.

Commenti

Se pattern o expression è NULL, PATINDEX restituisce NULL.

La posizione iniziale per PATINDEX è 1.

L'istruzione PATINDEX consente di eseguire i confronti in base alle regole di confronto dell'input. Per eseguire un confronto in base a regole di confronto specifiche, è possibile utilizzare COLLATE per applicare regole di confronto esplicite all'input.

Caratteri supplementari (coppie di surrogati)

Quando si usano le regole di confronto SC, qualsiasi coppia di surrogati UTF-16 nel parametro expression viene considerata come un singolo carattere dal valore restituito. Per altre informazioni, vedere Collation and Unicode Support.

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

Esempi

R. Esempio semplice di PATINDEX

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

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

Questo è il set di risultati.

position
--------
3

B. Utilizzo di un modello con PATINDEX

Nell'esempio seguente viene individuata la posizione in cui il modello ensure ha inizio in una riga specifica della colonna DocumentSummary nella tabella Document del database AdventureWorks2012.

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

Questo è il set di risultati.

position
--------  
64  

Se non si imposta una limitazione per le righe in cui eseguire la ricerca tramite la clausola WHERE, la query restituisce tutte le righe della tabella, indicando valori diversi da zero per le righe in cui il modello è stato trovato e zero per tutte le righe in cui la ricerca ha avuto esito negativo.

C. Utilizzo di 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 position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');  

Questo è il set di risultati.

position
--------  
8  

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

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

D. Uso di espressioni con caratteri jolly complesse con PATINDEX

Nell'esempio seguente viene usato l' operatore stringa[^] per trovare la posizione di un carattere diverso da un numero, una lettera o uno spazio.

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

Questo è il set di risultati.

position
--------
33

E. Utilizzo di 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  

Questo è il set di risultati.

position
--------
9

F. Utilizzo di una variabile per specificare il modello

L'esempio usa una variabile per passare un valore al parametro pattern. In questo esempio viene usato il database AdventureWorks2012.

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

Questo è il set di risultati.

position
--------  
22

Vedere anche

LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Tipi di dati (Transact-SQL)
Funzioni stringa (Transact-SQL)
(Wildcard - Character(s) to Match) (Carattere jolly - Corrispondente/i) (Transact-SQL)
(Wildcard - Character(s) to Match) (Carattere jolly - Non corrispondente/i) (Transact-SQL)
_ (Carattere jolly per corrispondenze di singoli caratteri) (Transact-SQL)
Carattere di percentuale (Caratteri jolly per la corrispondenza) (Transact-SQL)