PATINDEX (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBanco de dados SQL no Microsoft Fabric

Retorna a posição inicial da primeira ocorrência de um padrão em uma expressão especificada, ou zero, se o padrão não for encontrado, em todos os tipos de dados de caractere e texto válidos.

Convenções de sintaxe de Transact-SQL

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

Uma expressão de caractere que contém a sequência a ser encontrada. Personagens coringa podem ser usados; no entanto, o caractere % deve vir antes e seguir o padrão (exceto quando você busca pelo primeiro ou último caractere). Padrão é uma expressão da categoria de tipo de dados da cadeia de caracteres. O padrão é limitado a 8.000 caracteres.

Note

Embora expressões regulares tradicionais não sejam compatíveis nativamente no SQL Server 2022 (16.x) e em versões anteriores, a correspondência de padrões complexos semelhantes pode ser obtida usando várias expressões curinga. Veja a documentação de operadores de strings para mais detalhes sobre a sintaxe dos curingas. Para informações sobre funções de expressões regulares no SQL Server 2025 (17.x), veja Funções de expressões regulares.

expression

Uma expressão, tipicamente uma coluna que é pesquisada pelo padrão especificado. a expressão pertence à categoria de tipo de dados string de caracteres.

Tipos de retorno

bigint se a expressão for dos tipos de dados varchar(max) ou nvarchar(max ); caso contrário, int.

Remarks

Se o padrão for NULL, PATINDEX retorna NULL.

Se a expressão for NULL, PATINDEX retornará um erro.

A posição inicial é PATINDEX1.

PATINDEX executa comparações com base na ordenação da entrada. Para executar uma comparação em uma ordenação especificada, você pode usar COLLATE para aplicar uma ordenação explícita à entrada.

Caracteres complementares (pares substitutos)

Quando você usa colações com caracteres suplementares (SC), o valor de retorno conta quaisquer pares substitutos UTF-16 no parâmetro de expressão como um único caractere. Para obter mais informações, consulte Suporte para ordenação e Unicode.

0x0000 (char(0)) é um caractere indefinido em ordenações do Windows e não pode ser incluído em PATINDEX.

Examples

A. Exemplo básico de PATINDEX

O exemplo a seguir verifica uma cadeia de caracteres curta (interesting data) em busca do local inicial dos caracteres ter.

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

Veja a seguir o conjunto de resultados.

position
--------
3

B. Usar um padrão com PATINDEX

O exemplo a seguir mostra a posição em que o padrão ensure começa em uma linha específica da DocumentSummary coluna da Document tabela no banco de dados AdventureWorks2025.

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

Veja a seguir o conjunto de resultados.

position
--------
64

Se você não restringir as linhas a serem pesquisadas usando uma WHERE cláusula, a consulta retornará todas as linhas da tabela e relatará valores não zero para as linhas em que o padrão foi encontrado e zero para todas as linhas em que o padrão não foi encontrado.

C. Usar caracteres curinga com PATINDEX

O exemplo a seguir usa os curingas % e _ para localizar a posição na qual o padrão 'en', seguido de qualquer outro caractere e 'ure' é iniciado na cadeia de caracteres especificada (o índice inicia em 1):

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

Veja a seguir o conjunto de resultados.

position
--------
8

PATINDEX funciona da mesma forma que LIKE, então você pode usar qualquer curinga. Você não precisa colocar o padrão entre porcentagens. PATINDEX('a%', 'abc') retorna 1 e PATINDEX('%a', 'cba') retorna 3.

Diferentemente de LIKE, PATINDEX retorna uma posição, semelhante ao que CHARINDEX faz.

D. Usar expressões curinga complexas com PATINDEX

O exemplo a seguir usa o [^]operador string para encontrar a posição de um caractere que não é um número, letra ou espaço.

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

Veja a seguir o conjunto de resultados.

position
--------
33

E. Uso COLLATE com PATINDEX

O exemplo a seguir usa a função COLLATE para especificar explicitamente a ordenação da expressão que é pesquisada.

USE tempdb;
GO

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

Veja a seguir o conjunto de resultados.

position
--------
9

F. Usar uma variável para especificar o padrão

O exemplo a seguir usa uma variável para passar um valor ao parâmetro do padrão . Este exemplo utiliza o banco de dados AdventureWorks2025.

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

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

Veja a seguir o conjunto de resultados.

position
--------
22