sql >> Databasteknik >  >> RDS >> Mysql

Få räkningen av nollor i ett heltal med MySQL

Du kan jämföra stränglängden med och utan det tecken du vill räkna.

Lösning med LENGTH kod>

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

En bättre och säkrare lösning är att använda CHAR_LENGTH funktion istället för LENGTH fungera. Med CHAR_LENGTH funktion kan du också räkna flerbytetecken (som § ).

Lösning med CHAR_LENGTH

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

Du kan också utöka lösningen ovan så att den räknas för ett strängvärde med flera tecken.

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

demo på dbfiddle.uk

På MySQL kan du skapa en funktion för att använda ovanstående logik på ett enklare sätt:

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

Du kan använda den här nya funktionen GetStringCount så här:

-- 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. Performance Issues:The First Encounter

  2. LocalDB-distribution på klientdator

  3. Inloggningsutlösare i SQL Server

  4. Operatören '<' är reserverad PowerShell-fel