PATINDEX (Transact-SQL)

 

Publicado: dezembro de 2016

ESTE TÓPICO APLICA-SE A: simSQL Server (começando com o 2008)simBanco de Dados SQL do AzuresimAzure SQL Data Warehouse simParallel Data Warehouse

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.

Topic link icon Convenções de sintaxe Transact-SQL

-- Syntax for SQL Server, Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse  
  
PATINDEX ( '%pattern%' , expression )  

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

expressão
É um expressão, geralmente uma coluna que é pesquisada para o padrão especificado. expressão tem a categoria de tipo de dados de cadeia de caracteres.

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

Se qualquer um dos padrão ou expressão 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.

Ao usar agrupamentos SC, o valor de retorno contará qualquer par de substitutos do UTF-16 expressão parâmetro como um único caractere. Para obter mais informações, consulte Collation and Unicode Support.

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

A. Exemplo PATINDEX simples

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

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

Aqui está o conjunto de resultados.

3

B. 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 no banco de dados AdventureWorks2012.

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.

C. 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.

D. 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  

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

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

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

Aqui está o conjunto de resultados.

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

22

F. Usando um padrão com PATINDEX

O exemplo a seguir localiza a posição na qual o padrão wheel inicia no EnglishDescription coluna o dbo.DimProduct tabela para cada linha que contém os caracteres wheel. Se você não restringir as linhas a serem pesquisadas usando uma cláusula WHERE, a consulta retornará todas as linhas na tabela e relata os valores diferentes de zero para aquelas linhas em que o padrão foi encontrado e zero para todas as linhas em que o padrão não foi encontrado.

-- Uses AdventureWorks  
  
SELECT ProductKey,   
    PATINDEX('%wheel%',EnglishDescription)AS StartingPosition,  
EnglishDescription  
FROM dbo.DimProduct  
WHERE EnglishDescription LIKE '%wheel%'  
ORDER BY ProductKey;  

Este é um conjunto de resultados parcial.

ProductKey StartingPosition EnglishDescription

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

410 22 Replacement mountain wheel for entry-level rider.

411 22 Replacement mountain wheel for the casual to serious rider.

412 39 High-performance mountain replacement wheel.

413 24 Replacement road front wheel for entry-level cyclist.

415 8 Strong wheel with double-walled rim.

G. Usando caracteres curinga com PATINDEX

O exemplo a seguir usa caracteres curinga para localizar a posição na qual o padrão whe_l inicia no EnglishDescription coluna o dbo.DimProduct tabela, onde o sublinhado é um caractere curinga que representa qualquer caractere. 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.

-- Uses AdventureWorks  
  
SELECT ProductKey,   
    PATINDEX('%whe_l%',EnglishDescription)AS StartingPosition,  
EnglishDescription  
FROM dbo.DimProduct  
WHERE EnglishDescription LIKE '%wheel%'  
ORDER BY ProductKey;  

Tipos de dados (Transact-SQL)
Funções de cadeia de caracteres (Transact-SQL)
(Curinga – caracteres a serem correspondidos) (Transact-SQL)
(Curinga - caracteres não correspondência) (Transact-SQL)
_ (Curinga – corresponde a um caractere) (Transact-SQL)
Caractere de porcentagem (curinga – caracteres para correspondência) (Transact-SQL)

Contribuições da comunidade

ADICIONAR
Mostrar: