PATINDEX (Transact-SQL)
Retorna a posição inicial da primeira ocorrência de um padrão em uma expressão especificada, ou zeros se o padrão não for encontrado, em todos os tipos de dados de texto e caracteres válidos. Para obter mais informações, consulte Correspondência de padrões em critérios de pesquisa.
Sintaxe
PATINDEX ( '%pattern%' , expression )
Argumentos
'pattern'
É uma expressão de caractere que contém a sequência a ser encontrada. Podem ser usados caracteres curinga; entretanto, o caractere % deve preceder e seguir pattern (exceto na pesquisa dos primeiros ou últimos caracteres).expression
É uma expressão, normalmente uma coluna que é pesquisada quanto ao padrão específico. expression é 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.
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 AdventureWorks2008R2;
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 aquelas 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 caracteres curinga para localizar a posição na qual o padrão inicia en_ure em uma linha específica da coluna DocumentSummary na tabela Document, na qual o sublinhado é um curinga representando qualquer caractere.
USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', 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, a consulta retornará todas as linhas na tabela e registrará valores diferentes de zero para aquelas linhas nas quais o padrão foi localizado.
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 enviar um valor para o parâmetro pattern.
USE AdventureWorks2008R2;
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