Partilhar via


PATINDEX (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase 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 texto e caractere válidos.

Transact-SQL convenções de sintaxe

Syntax

PATINDEX ( '%pattern%' , expression )

Arguments

pattern

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

Note

Embora as expressões regulares tradicionais não tenham suporte nativo no SQL Server 2022 (16.x) e em versões anteriores, a correspondência de padrões complexos semelhante pode ser obtida usando várias expressões curinga. Consulte a documentação dos 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 tipos de dados de cadeia de caracteres.

Tipos de devolução

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 devolve NULL.

Se expression for NULL, PATINDEX retorna um erro.

A posição inicial para PATINDEX é 1.

PATINDEX realiza comparações com base no agrupamento da entrada. Para executar uma comparação em um agrupamento especificado, você pode usar COLLATE para aplicar um agrupamento explícito à entrada.

Caracteres suplementares (pares substitutos)

Quando usas 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 carácter. Para obter mais informações, consulte Classificação e suporte a Unicode.

0x0000 (char(0)) é um caractere indefinido em agrupamentos do Windows e não pode ser incluído no PATINDEX.

Examples

A. Exemplo básico de PATINDEX

O exemplo a seguir verifica uma cadeia de caracteres curta (interesting data) para o local inicial dos caracteres ter.

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

Aqui está o conjunto de resultados.

position
--------
3

B. Use um padrão com PATINDEX

O exemplo seguinte encontra a posição em que o padrão ensure começa numa linha específica da DocumentSummary coluna na Document tabela da base de dados AdventureWorks2025.

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

Aqui está 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 diferentes de zero para as linhas nas quais o padrão foi encontrado e zero para todas as linhas nas quais o padrão não foi encontrado.

C. Usar caracteres curinga com PATINDEX

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

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

Aqui está o conjunto de resultados.

position
--------
8

PATINDEX funciona como LIKE, para que você possa usar qualquer um dos curingas. Não é necessário incluir o padrão entre percentagens. PATINDEX('a%', 'abc') retorna 1 e PATINDEX('%a', 'cba') retorna 3.

Ao contrário LIKEde , PATINDEX retorna uma posição, semelhante ao que CHARINDEX faz.

D. Use expressões curinga complexas com PATINDEX

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

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

Aqui está o conjunto de resultados.

position
--------
33

E. Use COLLATE com PATINDEX

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

USE tempdb;
GO

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

Aqui está o conjunto de resultados.

position
--------
9

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

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

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

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

Aqui está o conjunto de resultados.

position
--------
22