PATINDEX (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)Ponto de extremidade de SQL no Microsoft FabricWarehouse no Microsoft Fabric
Retorna a posição inicial da primeira ocorrência de um padrão em uma expressão específica ou zero, se o padrão não for encontrado, em todos os tipos de dados de caractere e de texto válidos.
Convenções de sintaxe de Transact-SQL
Sintaxe
PATINDEX ( '%pattern%' , expression )
Observação
Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.
Argumentos
padrão
É 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 8.000 caracteres.
Observação
Embora as expressões regulares tradicionais não sejam nativamente compatíveis no SQL Server, a correspondência de padrões complexos semelhantes pode ser obtida com o uso de várias expressões curinga. Confira a documentação de Operações de cadeia de caracteres para obter mais detalhes sobre a sintaxe do curinga.
expressão
É uma expression, 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 é dos tipos de dados varchar(max) ou nvarchar(max); caso contrário, int.
Comentários
Se pattern ou expression for NULL, PATINDEX retornará NULL.
A posição inicial para PATINDEX é 1.
PATINDEX executa comparações com base na ordenação da entrada. Para fazer uma comparação em uma ordenação especificada, use COLLATE para aplicar uma ordenação explícita à entrada.
Caracteres suplementares (pares substitutos)
Ao usar ordenações SC, o valor retornado contará os pares alternativos UTF-16 no parâmetro expression como um caractere único. Para obter mais informações, consulte Suporte a ordenações e a Unicode.
0x0000 (char(0)) é um caractere indefinido em ordenações do Windows e não pode ser incluído em PATINDEX.
Exemplos
a. Exemplo simples de PATINDEX
O exemplo a seguir verifica uma cadeia de caracteres curta (interesting data
) em busca do local inicial dos caracteres ter
.
SELECT position = PATINDEX('%ter%', 'interesting data');
Este é o conjunto de resultados.
position
--------
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
da tabela Document
no banco de dados AdventureWorks2022.
SELECT position = PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
Este é o conjunto de resultados.
position
--------
64
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 position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');
Este é o conjunto de resultados.
position
--------
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 expressões curinga complexas com PATINDEX
O exemplo a seguir usa o [^]
operador de cadeia de caracteres para localizar a posição de um caractere que não é um número, uma letra ou um espaço.
SELECT position = PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!');
Este é o conjunto de resultados.
position
--------
33
E. Usando 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
Este é o conjunto de resultados.
position
--------
9
F. 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. Este exemplo usa o banco de dados AdventureWorks2022.
DECLARE @MyValue VARCHAR(10) = 'safety';
SELECT position = PATINDEX('%' + @MyValue + '%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
Este é o conjunto de resultados.
position
--------
22
Consulte Também
LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Tipos de dados (Transact-SQL)
Funções de cadeia de caracteres (Transact-SQL)
(Curinga – caracteres para correspondência) (Transact-SQL)
(Curinga – caracteres para não correspondência) (Transact-SQL)
_ (Curinga – corresponde a um caractere) (Transact-SQL)
Caractere de porcentagem (Curinga - Caracteres de Correspondência) (Transact-SQL)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de