Partilhar via


CHARINDEX (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric

Essa função pesquisa uma expressão de caractere dentro de uma segunda expressão de caractere, retornando a posição inicial da primeira expressão, se localizada.

Convenções de sintaxe de Transact-SQL

Sintaxe

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )   

Argumentos

expressionToFind
Uma expressão de caractere que contém a sequência a localizar. expressionToFind tem um limite de 8.000 caracteres.

expressionToSearch
Uma expressão de caractere a ser pesquisada.

start_location
Uma expressão integer ou bigint em que a pesquisa inicia. Se start_location não for especificado, tiver um valor negativo ou for um valor zero (0), a pesquisa começará no início de expressionToSearch.

Tipos de retorno

bigint se expressionToSearch tiver um tipo de dados nvarchar (max) , varbinary (max) ou varchar (max) ; int caso contrário.

Comentários

Se a expressão expressionToFind ou expressionToSearch tiver um tipo de dados Unicode (nchar ou nvarchar) e o outra expressão não, a função CHARINDEX converterá essa outra expressão em um tipo de dados Unicode. CHARINDEX não pode ser usado com os tipos de dados image, ntext ou text.

Se a expressão expressionToFind ou expressionToSearch tiver um valor NULL, CHARINDEX retornará NULL.

Se CHARINDEX não encontrar expressionToFind em expressionToSearch, CHARINDEX retornará 0.

CHARINDEX efetua comparações com base na ordenação de entrada. Para fazer uma comparação em uma ordenação especificada, use COLLATE para aplicar uma ordenação explícita à entrada.

A posição inicial retornada é com base em 1, não com base em 0.

0x0000 (char(0) ) é um caractere indefinido em ordenações do Windows e não pode ser incluído em CHARINDEX.

Caracteres suplementares (pares substitutos)

Ao usar ordenações de SC, start_location e o valor retornado contam pares substitutos como um caractere, e não dois. Para obter mais informações, consulte Suporte a ordenações e a Unicode.

Exemplos

a. Retornando a posição inicial de uma expressão

Este exemplo pesquisa bicycle na variável de valor de cadeia de caracteres pesquisada @document.

DECLARE @document VARCHAR(64);  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bicycle', @document);  
GO  

Veja a seguir o conjunto de resultados.

-----------   
48            

B. Pesquisando em uma posição específica

Este exemplo usa o parâmetro start_location opcional para iniciar a pesquisa para vital no quinto caractere da variável de valor de cadeia de caracteres pesquisada @document.

DECLARE @document VARCHAR(64);  
  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('vital', @document, 5);  
GO  

Veja a seguir o conjunto de resultados.

-----------   
16            
  
(1 row(s) affected)  

C. Pesquisando uma expressão inexistente

Este exemplo mostra o conjunto de resultados quando CHARINDEX não localiza expressionToFind em expressionToSearch.

DECLARE @document VARCHAR(64);  
  
SELECT @document = 'Reflectors are vital safety' +  
                   ' components of your bicycle.';  
SELECT CHARINDEX('bike', @document);  
GO  

Veja a seguir o conjunto de resultados.

-----------
0
  
(1 row(s) affected)

Este exemplo mostra uma pesquisa que diferencia maiúsculas de minúsculas para a cadeia de caracteres 'TEST' na cadeia de caracteres de pesquisada 'This is a Test``'.

USE tempdb;  
GO  
--perform a case sensitive search  
SELECT CHARINDEX ( 'TEST',  
       'This is a Test'  
       COLLATE Latin1_General_CS_AS);  

Veja a seguir o conjunto de resultados.

-----------
0

Este exemplo mostra uma pesquisa que diferencia maiúsculas de minúsculas para a cadeia de caracteres 'Test' em 'This is a Test'.

  
USE tempdb;  
GO  
SELECT CHARINDEX ( 'Test',  
       'This is a Test'  
       COLLATE Latin1_General_CS_AS);  

Veja a seguir o conjunto de resultados.

-----------
11

Este exemplo mostra uma pesquisa que não diferencia maiúsculas de minúsculas para a cadeia de caracteres 'TEST' em 'This is a Test'.

USE tempdb;  
GO  
SELECT CHARINDEX ( 'TEST',  
       'This is a Test'  
       COLLATE Latin1_General_CI_AS);  
GO  

Veja a seguir o conjunto de resultados.

-----------
11

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

F. Pesquisar desde o início de uma expressão de cadeia de caracteres

Este exemplo retorna o primeiro local da cadeia de caracteres is na cadeia de caracteres This is a string, começando da posição 1 (o primeiro caractere) de This is a string.

SELECT CHARINDEX('is', 'This is a string');  

Veja a seguir o conjunto de resultados.

---------
3

G. Busca de uma posição que não a primeira

Este exemplo retorna o primeiro local da cadeia de caracteres is na cadeia de caracteres This is a string começando a pesquisa da posição 4 (o quarto caractere).

SELECT CHARINDEX('is', 'This is a string', 4);  

Veja a seguir o conjunto de resultados.

---------
 6

H. Resulta quando a cadeia de caracteres não é encontrada

Este exemplo mostra o valor retornado quando CHARINDEX não encontra a cadeia de caracteres string_pattern na cadeia de caracteres pesquisada.

SELECT TOP(1) CHARINDEX('at', 'This is a string') FROM dbo.DimCustomer;  

Veja a seguir o conjunto de resultados.

---------
0

Confira também

LEN (Transact-SQL)
PATINDEX (Transact-SQL)
Funções de cadeia de caracteres (Transact-SQL)
+ (Concatenação de cadeias de caracteres) (Transact-SQL)
Suporte a ordenações e a Unicode