Compartilhar via


CHARINDEX (Transact-SQL)

Pesquisa uma expressão para outra e retorna sua posição inicial, se for localizada.

Ícone de vínculo de tópico Convenções de sintaxe Transact-SQL

Sintaxe

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

Argumentos

  • expressionToFind
    É uma expressão de caractere que contém a sequência a ser localizada. expressionToFind é limitado a 8000 caracteres.

  • expressionToSearch
    É uma expressão de caractere a ser pesquisada.

  • start_location
    É um inteiro ou expressão integer ou bigint em que a pesquisa inicia. Se start_location não for especificado, for um número negativo ou 0, a pesquisa começará no início da expressionToSearch.

Tipos de retorno

bigint se expressionToSearch for dos tipos de dados varchar(max), nvarchar(max) ou varbinary(max); caso contrário, int.

Comentários

Se expressionToFind ou expressionToSearch for de um tipo de dados Unicode (nvarchar ou nchar) e a outra não for, a outra será convertida em um tipo de dados Unicode. CHARINDEX não pode ser usado com tipos de dados text, ntext e image.

Se expressionToFind ou expressionToSearch é o NULL, CHARINDEX retorna o NULL.

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

CHARINDEX efetua 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.

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

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

Caracteres suplementares (pares substitutos)

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

Exemplos

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

O exemplo a seguir retorna a posição na qual a sequência de caracteres bicycle inicia na coluna DocumentSummary da tabela Document.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

Aqui está o conjunto de resultados.

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

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

O exemplo a seguir usa o parâmetro opcional start_location para iniciar a procura por vital no quinto caractere da coluna DocumentSummary.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

Aqui está o conjunto de resultados.

----------- 
16          

(1 row(s) affected)

C.Pesquisando uma expressão inexistente

O exemplo a seguir mostra o conjunto de resultados quando expressionToFind não é localizado em expressionToSearch.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

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

Aqui está o conjunto de resultados.

-----------

0

(1 row(s) affected)

D.Executando uma pesquisa com diferenciação de maiúsculas e minúsculas

O exemplo a seguir executa uma pesquisa que diferencia maiúsculas e minúsculas para a cadeia de caracteres 'TEST' em 'Das ist ein Test'.

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

Aqui está o conjunto de resultados.

-----------

0

O exemplo a seguir executa uma pesquisa que diferencia maiúsculas e minúsculas para a cadeia de caracteres 'Test' em 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

Aqui está o conjunto de resultados.

-----------

13

E.Executando uma pesquisa sem diferenciação de maiúsculas e minúsculas

O exemplo a seguir executa uma pesquisa que não diferencia maiúsculas e minúsculas para a cadeia de caracteres 'TEST' em 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

Aqui está o conjunto de resultados.

-----------

13

Consulte também

Referência

Funções de cadeia de caracteres (Transact-SQL)

+ (Concatenação de cadeias de caracteres) (Transact-SQL)

Conceitos

Suporte a agrupamentos e a Unicode