Compartilhar via


PATINDEX (Transact-SQL)

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

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

PATINDEX ( '%pattern%' , expression )

Argumentos

  • pattern
    É uma expressão de caractere que contém a sequência a ser localizada. Caracteres curinga podem ser usados; entretanto, o caractere % deve vir antes e seguir pattern (exceto quando você pesquisa o primeiro e último caracteres). pattern é uma expressão da categoria de tipo de dados de cadeia de caracteres. pattern é limitado a 8000 caracteres.

  • expression
    É uma expressão, geralmente uma coluna na qual procurar o padrão especificado. expression é uma expressão da categoria de tipo de dados de cadeia de caracteres.

Tipos de retorno

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

Comentários

Se pattern ou expression for NULL, PATINDEX retornará NULL.

PATINDEX executa comparações com base no agrupamento da entrada. Para executar uma comparação em um agrupamento especificado, é possível usar COLLATE para aplicar um agrupamento explícito à entrada.

Caracteres suplementares (pares substitutos)

Ao usar agrupamentos SC, o valor de retorno contará qualquer par substituto UTF-16 no parâmetro expression como um caractere único. Para obter mais informações, consulte Suporte a agrupamentos e a Unicode.

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

Exemplos

A.Usando um padrão com PATINDEX

O exemplo a seguir localiza a posição na qual o padrão ensure inicia em uma linha específica da coluna DocumentSummary na tabela Document.

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

Aqui está o conjunto de resultados.

-----------

64

(1 row(s) affected)

Se você não restringir as linhas a serem pesquisadas usando uma cláusula WHERE, a consulta retornará todas as linhas na tabela e registrará valores diferentes de zero para as linhas nas quais o padrão foi localizado e zero para todas as linhas nas quais o padrão não foi localizado.

B.Usando 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');
 

Aqui está o conjunto de resultados.

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

8

PATINDEX funciona da mesma forma que LIKE, então você pode usar qualquer curinga. Não é necessário 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.

C.Usando COLLATE com PATINDEX

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

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

D.Usando uma variável para especificar o padrão

O exemplo a seguir usa uma variável para passar um valor para o parâmetro pattern.

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

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

Aqui está o conjunto de resultados.

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

22

Consulte também

Referência

Tipos de dados (Transact-SQL)

Funções de cadeia de caracteres (Transact-SQL)

[ ] (Curinga – caracteres para correspondência) (Transact-SQL)

[^] (Curinga – caracteres que não correspondem a) (Transact-SQL)

_ (Curinga – corresponde a um caractere) (Transact-SQL)

Caractere de porcentagem (Curinga - Caracteres de Correspondência) (Transact-SQL)