Share via


PATINDEX (Transact-SQL)

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 )

Argomenti

  • pattern
    Espressione di caratteri che contiene la sequenza da cercare. È possibile utilizzare 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. pattern ha un limite di 8000 caratteri.

  • 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 è di tipo varchar(max) o nvarchar(max); in caso contrario, int.

Osservazioni

Se pattern o expression è NULL, viene restituito NULL da PATINDEX.

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 utilizzano le regole di confronto SC, qualsiasi coppia di surrogati UTF-16 nel parametro expression verrà considerata come un singolo carattere dal valore restituito. Per ulteriori informazioni, vedere Regole di confronto e supporto Unicode.

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

Esempi

A.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.

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

Set di risultati:

-----------

64

(1 row(s) affected)

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.

B.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 PATINDEX('%en_ure%', 'please ensure the door is locked');
 

Set di risultati:

------------

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.

C.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

D.Utilizzo di una variabile per specificare il modello

Nell'esempio seguente viene utilizzata una variabile per passare un valore al parametro pattern.

USE AdventureWorks2012; 
GO
DECLARE @MyValue varchar(10) = 'safety'; 

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

Set di risultati:

------------

22

Vedere anche

Riferimento

Tipi di dati (Transact-SQL)

Funzioni per i valori stringa (Transact-SQL)

[ ] (carattere jolly) (Transact-SQL)

[^] (carattere jolly) (Transact-SQL)

_ (carattere jolly per corrispondenze di singoli caratteri) (Transact-SQL)

Carattere di percentuale (carattere jolly) (Transact-SQL)