Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como a função CHARINDEX() funciona no SQL Server (T-SQL)


No SQL Server, você pode usar o T-SQL CHARINDEX() função para encontrar a posição inicial de uma expressão de caractere dentro de outra expressão de caractere.

Você fornece ambas as expressões de caracteres como argumentos. Você também pode fornecer um argumento opcional para especificar uma posição na qual iniciar a pesquisa.


Sintaxe


A sintaxe fica assim:
CHARINDEX ( expressãoParaEncontrar , expressãoParaPesquisar [ , local_inicial])

Onde expressionToFind é a expressão que você deseja encontrar na outra string e expressionToSearch é a outra cadeia. O opcional start_location pode ser usado para especificar uma posição dentro de expressionToSearch para começar a procurar.

Observe que apenas a posição da primeira ocorrência é retornada.


Exemplo


Aqui está um exemplo:
SELECT CHARINDEX('Bob', 'Bob gosta de cerveja. Bob também gosta de carne.') AS Result;

Resultado:
+----------+| Resultado ||----------|| 1 |+----------+

Neste exemplo, o primeiro argumento é Bob , o que significa que estamos pesquisando o segundo argumento para Bob . O resultado é 1 porque essa é a posição em que Bob aparece primeiro no segundo argumento.

Você também pode notar que Bob na verdade, aparece duas vezes na string, mas apenas a posição da primeira correspondência é retornada.

Sem correspondência


Se o segundo argumento não contiver Bob o resultado teria sido 0 .
SELECT CHARINDEX('Bob', 'Kate gosta de cerveja. Kate também gosta de bife.') AS Result;

Resultado:
+----------+| Resultado ||----------|| 0 |+----------+

Especificando uma posição inicial


Você pode (opcionalmente) especificar uma posição inicial para a pesquisa. Isso significa que o SQL Server ignorará qualquer ocorrência anterior a essa posição inicial. No entanto, os resultados ainda são relatados com base em sua posição em toda a string (não na posição inicial escolhida).

Segue um exemplo para demonstrar:
SELECT CHARINDEX('Bob', 'Bob gosta de cerveja. Bob também gosta de carne bovina.', 16) AS Result;

Resultado:
+----------+| Resultado ||----------|| 17 |+----------+

Neste exemplo começamos a procurar na posição 16 (que é o espaço antes do 2º Bob ). O resultado é que a primeira ocorrência de Bob é ignorado e a posição do segundo é retornada. E podemos ver que sua posição é de 17 caracteres desde o início da string (mesmo sendo apenas um caractere de onde começamos a busca).

Sensibilidade a maiúsculas e minúsculas


Você pode executar explicitamente uma pesquisa com distinção entre maiúsculas e minúsculas adicionando o COLLATE cláusula para o seu SELECT demonstração:

Aqui está um exemplo que inclui uma pesquisa que diferencia maiúsculas de minúsculas e uma pesquisa que não diferencia maiúsculas de minúsculas:
SELECT CHARINDEX('Cerveja', 'Bob gosta de cerveja.' COLLATE Latin1_General_CS_AS) AS 'Diferencia maiúsculas de minúsculas', CHARINDEX('Cerveja', 'Bob gosta de cerveja.' COLLATE Latin1_General_CI_AS) AS 'Não diferencia maiúsculas de minúsculas'; 
Resultado:
+------------------+--------------------+| Sensível a maiúsculas e minúsculas | Não diferencia maiúsculas de minúsculas ||------------------+--------------------|| 0 | 11 |+------------------+--------------------+

O primeiro diferencia maiúsculas de minúsculas porque _CS (no agrupamento) significa Case-Sensitive. O segundo não diferencia maiúsculas de minúsculas porque _CI significa Case-Insensitive.