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 de SQL no Microsoft Fabric
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 ] )
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
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
Este é 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
Este é 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
Este é o conjunto de resultados.
-----------
0
(1 row(s) affected)
D. Executando uma pesquisa com diferenciação de maiúsculas e minúsculas
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);
Este é 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);
Este é o conjunto de resultados.
-----------
11
E. Executando uma pesquisa sem diferenciação de maiúsculas e minúsculas
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
Este é 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');
Este é 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);
Este é 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;
Este é 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