Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obter contagem de zeros em um inteiro usando MySQL


Você pode comparar o comprimento da string com e sem o caractere que deseja contar.

Solução usando LENGTH
-- 0 in 10090: 3
-- 0 in 10000: 4
SELECT 
   (LENGTH(number) - LENGTH(REPLACE(number, '0', ''))) AS char_count
FROM dual;

Uma solução melhor e mais segura é usar o CHAR_LENGTH função em vez do LENGTH função. Com CHAR_LENGTH função você também pode contar caracteres multi-byte (como § ).

Solução usando CHAR_LENGTH
-- § in 100§0: 1
SELECT 
    (CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '§', ''))) AS char_count
FROM dual;

Você também pode estender a solução acima para contar um valor de string usando vários caracteres.
-- 12 in 10120012: 2
SELECT number,
  FLOOR((CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '12', ''))) / CHAR_LENGTH('12')) AS str_count
FROM dual;

demonstração em dbfiddle.uk

No MySQL você pode criar uma função para usar a lógica acima de uma maneira mais simples:
CREATE FUNCTION GetStringCount(strValue VARCHAR(255), strSearchValue VARCHAR(255))
RETURNS INT DETERMINISTIC NO SQL
RETURN FLOOR((CHAR_LENGTH(strValue) - CHAR_LENGTH(REPLACE(strValue, strSearchValue, ''))) / CHAR_LENGTH(strSearchValue));

Você pode usar esta nova função GetStringCount assim:
-- example to count non-multi-byte character (here 0).
-- 0 in 10090: 3
-- 0 in 10000: 4
SELECT number, GetStringCount(number, '0') AS strCount
FROM dual;

-- example to count multi-byte character (here §).
-- § in 100§0: 1
SELECT number, GetStringCount(number, '§') AS strCount
FROM dual;

-- example to count a string with multiple characters.
-- 12 in 10120012: 2
SELECT number, GetStringCount(number, '12') AS strCount
FROM dual;