Inicial > SQL Server > Function – Retorna quantidade de um caracter de uma String

Function – Retorna quantidade de um caracter de uma String

Hoje um colega aqui da empresa, precisava de uma função que
retorne a quantidades que um caracter aparece em uma determinada string.

Eu desconheço uma função do SQL que faça isso, portanto sugeri
que ele criasse uma user function para fazer essa validação.

Ai é que ta, sabemos que user functions podem dar uma boa
dor de cabeça pela sua péssima performance quando utilizadas em consultas que
retornam uma quantidade razoável de registros. Então, parei para pensar melhor para
ver qual seria a melhor maneira de fazer essa function.

Creio que a idéia inicial de todos seria fazer um loop na string,
correndo por todos os caracteres somando a quantidade de vezes em que o
caracter aparece na string. Algo mais ou menos assim:

DECLARE @Str VarChar(200),

       
@Caracter_A_Procurar VarChar(200),

        @i Int,

       
@Qtde_Caracter Int;

SET @Str = ‘Um teste para validar
quantos caracteres existem nesta String’

SET @Caracter_A_Procurar = ‘a’

SET @i = 0

SET @Qtde_Caracter = 0

WHILE @i <= LEN(@Str)

BEGIN

    IF SUBSTRING(@Str, @i, 1) = @Caracter_A_Procurar

        SET @Qtde_Caracter =
@Qtde_Caracter + 1

    SET @i = @i + 1

END

SELECT @Qtde_Caracter

Ok, o código acima funciona, mas pensando bem, existe outra
maneira bem mais eficiente de fazer esta validação. Que tal assim:

DECLARE @Str VarChar(200),

       
@Caracter_A_Procurar VarChar(200)

SET @Str = ‘Um teste para validar
quantos caracteres existem nesta String’

SET @Caracter_A_Procurar = ‘a’

SELECT LEN(@Str) LEN(REPLACE(@Str,
@Caracter_A_Procurar, ))

O código acima pega a string e faz um replace do caracter “a”
por nada, e depois verifica a quantidade de caracteres da string sem o “a” e
subtrai pela quantidade de caracteres original. O resultado será exatamente a
quantidade de vezes em que “a” aparece na string.

Fica ai a dica…

Categorias:SQL Server
  1. 19 de janeiro de 2015 às 16:11

    Essa do REPLACE foi bem bolada! Valeu a dica!

  2. Danusa Ribeiro
    27 de janeiro de 2016 às 10:05

    ajudou muitoo… a do replace foi mega sacada!!! parabéns!!!!

  3. 9 de janeiro de 2018 às 23:07

    Simples e muito eficiente, mandou bem!

  4. 9 de abril de 2020 às 14:08

    Fabiano,

    A um tempo atrás eu usei um exemplo justamente similar ao seu:

    DECLARE @string VARCHAR(8000), @searchString VARCHAR(100);
    SET @string = ‘abdceada’;
    SET @searchString = ‘a’
    SELECT LEN(@string) – LEN(REPLACE(@string, @searchString, ”));

  1. No trackbacks yet.

Deixe um comentário