Condividi tramite


PATINDEX (Transact-SQL)

Restituisce la posizione di inizio della prima occorrenza di un criterio di ricerca in un'espressione specificata, oppure zero se il criterio di ricerca non viene trovato, in tutti i dati di tipo carattere e text validi. Per ulteriori informazioni, vedere Criteri di ricerca nelle condizioni di ricerca.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

PATINDEX ( '%pattern%' , expression )

Argomenti

  • 'pattern'
    Espressione di caratteri contenente la sequenza da trovare. È possibile utilizzare i caratteri jolly. Il carattere % deve, tuttavia, precedere e seguire pattern, tranne quando si esegue la ricerca del primo o dell'ultimo carattere.

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

Tipi restituiti

bigint se expression è di tipo varchar(max) o nvarchar(max). Per gli altri tipi di dati, int.

Osservazioni

Se uno dei parametri è pattern o expression è NULL, PATINDEX restituisce NULL.

L'istruzione PATINDEX esegue 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.

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 criterio di ricerca con PATINDEX

Nell'esempio seguente viene individuata la posizione in cui il criterio di ricerca ensure ha inizio in una riga specifica della colonna DocumentSummary nella tabella Document.

USE AdventureWorks2008R2;
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 criterio di ricerca è 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 caratteri jolly per individuare la posizione in cui il criterio di ricerca en_ure ha inizio in una riga specifica della colonna DocumentSummary nella tabella Document. Il carattere di sottolineatura è il carattere jolly che rappresenta qualsiasi carattere.

USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', 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, la query restituisce tutte le righe della tabella, indicando valori diversi da zero per le righe in cui il criterio di ricerca è stato trovato.

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 criterio

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

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

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

Set di risultati:

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

22