PATINDEX (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

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.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

PATINDEX ( '%pattern%' , expression )  

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.

Osservazioni:

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 ulteriori informazioni, vedi 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.

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');  

Il set di risultati è il seguente.

position
--------
3

B. Utilizzo di un modello con PATINDEX

Nell'esempio seguente viene trovata la posizione in corrispondenza della DocumentSummary quale il criterio ensure inizia in una riga specifica della colonna nella Document tabella nel database AdventureWorks2022.

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

Il set di risultati è il seguente.

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!');  

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 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!'); 

Il set di risultati è il seguente.

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  

Il set di risultati è il seguente.

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 utilizzato il database AdventureWorks2022.

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

Il set di risultati è il seguente.

position
--------  
22

Vedi anche

LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Tipi di dati (Transact-SQL)
Funzioni per i valori stringa (Transact-SQL)
(Caratteri jolly per la corrispondenza) (Transact-SQL)
(Caratteri jolly per la mancata corrispondenza) (Transact-SQL)
_ (carattere jolly - Corrispondenza di un carattere) (Transact-SQL)
Carattere percentuale (carattere jolly - Caratteri da associare) (Transact-SQL)