A função SQL CHARINDEX é uma ferramenta poderosa que nos permite encontrar a posição de uma substring ou expressão dentro de uma determinada string. É comumente usada no SQL Server para buscar caracteres ou substrings específicas em dados de texto.
A sintaxe da função SQL CHARINDEX é a seguinte:
CHARINDEX(expressão_a_encontrar, expressão_a_pesquisar [, posição_inicial])
A função recebe três parâmetros:
- expressão_a_encontrar: Este parâmetro especifica o caractere ou string que queremos buscar dentro de outra string.
- expressão_a_pesquisar: Este parâmetro especifica a string na qual queremos buscar a expressão_a_encontrar.
- posição_inicial: Este é um parâmetro opcional que nos permite especificar a posição inicial para a busca. Se não for especificado, a busca começa a partir do início da string.
Vamos ver alguns exemplos para entender como a função SQL CHARINDEX funciona:
Exemplo 1: Encontrando a Posição de um Caractere em uma String
Neste exemplo, queremos encontrar a posição do caractere ‘@’ no endereço de e-mail ‘rajendra.gupta16@gmail.com’.
SELECT CHARINDEX('@', 'rajendra.gupta16@gmail.com') AS PosiçãoDoCaractere;
A saída desta consulta será a posição do caractere ‘@’, que é 17.
Exemplo 2: Usando o Parâmetro posição_inicial
Também podemos especificar um parâmetro posição_inicial para iniciar a busca a partir de uma posição específica na string. Neste exemplo, queremos encontrar a posição do caractere ‘.’ no endereço de e-mail, começando a partir da posição 11.
SELECT CHARINDEX('.', 'rajendra.gupta16@gmail.com', 11) AS PosiçãoDoCaractere;
A saída desta consulta será a posição do caractere ‘.’, que é 23. A busca começa a partir da posição 11 e para assim que encontra uma correspondência.
Exemplo 3: Buscando uma Substring
Além de buscar caracteres individuais, também podemos buscar substrings dentro de uma string. Neste exemplo, queremos buscar a substring ‘Rajendra’ na string ‘Explore SQL Server no SQLShack com artigos de Rajendra Gupta’.
DECLARE @ExpressãoAPesquisar VARCHAR(100);
SET @ExpressãoAPesquisar = 'Explore SQL Server no SQLShack com artigos de Rajendra Gupta';
SELECT CHARINDEX('Rajendra', @ExpressãoAPesquisar) AS PosiçãoDaSubstring;
A saída desta consulta será a posição inicial da substring ‘Rajendra’, que é 32. Se a substring não for encontrada, a função retorna 0.
Exemplo 4: Lidando com Múltiplas Substrings Correspondentes
Em alguns casos, podemos ter múltiplas substrings correspondentes dentro de uma string. Neste exemplo, queremos buscar a substring ‘SQLShack’ na string ‘Explore SQL Server no SQLShack com artigos de Rajendra Gupta – SQLShack’.
DECLARE @ExpressãoAPesquisar VARCHAR(100);
SET @ExpressãoAPesquisar = 'Explore SQL Server no SQLShack com artigos de Rajendra Gupta - SQLShack';
SELECT CHARINDEX('SQLShack', @ExpressãoAPesquisar) AS PosiçãoDaSubstring;
A saída desta consulta será a posição inicial da primeira ocorrência da substring ‘SQLShack’, que é 24. Se quisermos iniciar a busca a partir de uma posição específica, podemos usar o parâmetro posição_inicial.
Exemplo 5: Usando SQL CHARINDEX com a Declaração SQL CASE
Podemos usar a função SQL CHARINDEX em conjunto com a declaração SQL CASE para verificar a existência de uma substring específica em uma string. Neste exemplo, queremos verificar se a substring ‘SQLShack’ existe na string ‘Explore SQL Server com artigos no SQLShack’.
DECLARE @Nome AS VARCHAR(100) = 'Explore SQL Server com artigos no SQLShack';
SELECT CASE WHEN CHARINDEX('SQLShack', @Nome) > 0 THEN 'Existe' ELSE 'Não Existe' END AS EncontrarSubstring;
A saída desta consulta será ‘Existe’ se a substring ‘SQLShack’ for encontrada na string, e ‘Não Existe’ caso contrário.
Exemplo 6: Realizando uma Busca Sensível a Maiúsculas e Minúsculas
Por padrão, a função SQL CHARINDEX realiza uma busca insensível a maiúsculas e minúsculas. No entanto, podemos usar a colação para realizar uma busca sensível a maiúsculas e minúsculas. Neste exemplo, queremos buscar a substring ‘sqlshack’ na string ‘Explore SQL Server no SQLSHACK com artigos de Rajendra Gupta – SQLShack’.
DECLARE @ExpressãoAPesquisar VARCHAR(100);
SET @ExpressãoAPesquisar = 'Explore SQL Server no SQLSHACK com artigos de Rajendra Gupta - SQLShack';
SELECT CHARINDEX('sqlshack', @ExpressãoAPesquisar) AS PosiçãoDaSubstring;
A saída desta consulta será a posição inicial da substring ‘sqlshack’, que é 24. Mesmo que a caixa da substring não corresponda exatamente, a função ainda retorna a saída correta. Para realizar uma busca sensível a maiúsculas e minúsculas, podemos usar a cláusula COLLATE com uma colação específica.
Exemplo 7: Usando SQL CHARINDEX com Coluna de Tabela
Também podemos usar a função SQL CHARINDEX para buscar substrings específicas dentro de dados armazenados em uma tabela. Neste exemplo, queremos verificar a posição do caractere ‘R’ na coluna ‘NomeEmp’ da tabela ‘Funcionário’.
SELECT TOP 10 [NomeEmp], CHARINDEX('R', nomeemp) AS "Posição do R", [Cidade], [Cargo]
FROM [SQLShackDemo].[dbo].[Funcionário];
A saída desta consulta incluirá uma nova coluna que mostra a posição do caractere ‘R’ na coluna ‘NomeEmp’. Se o ‘NomeEmp’ não contiver o caractere especificado, a função retorna 0.
Esses são apenas alguns exemplos de como a função SQL CHARINDEX pode ser usada no SQL Server. É uma função versátil que pode ser usada para buscar caracteres ou substrings específicas dentro de strings, tanto em consultas individuais quanto em colunas de tabelas.
Em conclusão, a função SQL CHARINDEX é uma ferramenta valiosa para buscar e manipular dados de texto no SQL Server. Ela nos permite encontrar a posição de caracteres ou substrings dentro de strings, e pode ser usada em uma variedade de cenários. Compreender como usar essa função de forma eficaz pode melhorar significativamente nossas habilidades no SQL Server.