sql >> Databáze >  >> RDS >> Mysql

Získejte počet nul v celém čísle pomocí MySQL

Můžete porovnat délku řetězce se znakem, který chcete počítat, a bez něj.

Řešení pomocí DÉLKA

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

Lepším a bezpečnějším řešením je použití CHAR_LENGTH místo funkce DÉLKA funkce. S CHAR_LENGTH můžete také počítat vícebajtové znaky (jako § ).

Řešení pomocí CHAR_LENGTH

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

Výše uvedené řešení můžete také rozšířit tak, aby počítal hodnotu řetězce pomocí více znaků.

-- 12 in 10120012: 2
SELECT number,
  FLOOR((CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '12', ''))) / CHAR_LENGTH('12')) AS str_count
FROM dual;

demo na dbfiddle.uk

Na MySQL můžete vytvořit funkci použít výše uvedenou logiku jednodušším způsobem:

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));

Můžete použít tuto novou funkci GetStringCount takhle:

-- 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;


  1. MySQL:Převeďte INT na DATETIME

  2. Problémy s vytvářením tabulky RODBC sqlSave

  3. Tipy k tabulce Microsoft Access – Triky a pokyny Část III

  4. Node.js se připojuje ke kontejneru MySQL Docker ECONNREFUSED