Compartilhar via


PATINDEX (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise de SQL no Microsoft FabricDepósito 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. Usar 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