Como contar número de ocorrências de string num campo do MySQL

Recentemente, meu chefe perguntou se era possível encontrar uma quantidade de strings dentro de uma campo através de uma consulta SQL. Desafio lançado, eis a solução:

#Neste exemplo field2 possui o valor Gilberto Albino
SELECT 
    id,
    field1,    
    ROUND ((LENGTH(field2) - LENGTH( REPLACE ( field2, "i", "") ) ) / LENGTH("i")) AS matches    
FROM table;

O resultado deverá ser 2 para este caso.

O que acontece ai é o seguinte:

Na consulta LENTGH(field2) deve retornar o tamanho do string encontrado como está no banco de dados.
Após substituirmos “i” por “” estamos removendo os caracteres.
Matematicamente, seria: Arredonde o resultado de tamanho(Gilberto Albino = 15 ) – tamanho(Glberto Albno = 13) / tamanho( i = 1).

Esta matemática é necessária, pois você poderá passar um string diferente como por exemplo: “il”, ou “lb”.

É isso aí! Um abraço do Giba!

2 comentários sobre “Como contar número de ocorrências de string num campo do MySQL”

  1. Testei o script e funcionou perfeito com UM caractere.
    Com mais que um não consegui ter sucesso.
    Segue meu script:

    DECLARE @MinhaExpressao varchar(max) = ‘,’;

    SELECT TOP 400
    @MinhaExpressao AS ‘Caractere Buscado’,
    t1.MonthyRent,
    ROUND(LEN(t1.MonthyRent)- LEN( REPLACE ( t1.MonthyRent, @MinhaExpressao, ”) ) / LEN(@MinhaExpressao) , 0) AS ‘Qtd-Ocorrências’,
    t2.Description AS ‘Origem-Nome’,
    t3.DateCreated AS ‘Criação’
    FROM
    Proposal t1 WITH(NOLOCK)
    LEFT JOIN [dbo].[ProposalSource] t2 WITH(NOLOCK)
    ON (t2.Id = t1.IdProposalSource)
    LEFT JOIN [dbo].[CustomerImport] t3
    ON (t3.CPF = t1.CPF COLLATE SQL_Latin1_General_CP850_CI_AI)
    WHERE
    ROUND(LEN(t1.MonthyRent)- LEN( REPLACE ( t1.MonthyRent, @MinhaExpressao, ”) ) / LEN(@MinhaExpressao), 0) > 1

    GO

    Se puder me ajudar… agradeço.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *