sql >> Database >  >> RDS >> Mysql

Krijg het aantal nullen in een geheel getal met MySQL

U kunt de tekenreekslengte vergelijken met en zonder het teken dat u wilt tellen.

Oplossing met LENGTH

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

Een betere en veiligere oplossing is om de te gebruiken CHAR_LENGTH functie in plaats van de LENGTH functie. Met CHAR_LENGTH functie kunt u ook multi-byte tekens tellen (zoals § ).

Oplossing met CHAR_LENGTH

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

U kunt de bovenstaande oplossing ook uitbreiden om te tellen voor een tekenreekswaarde met meerdere tekens.

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

demo op dbfiddle.uk

Op MySQL kun je een functie maken om de bovenstaande logica op een eenvoudigere manier te gebruiken:

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

U kunt deze nieuwe functie gebruiken GetStringCount zoals dit:

-- 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. php:sessies versus database

  2. Hoe het maximale aantal verbindingen in MySQL te vergroten?

  3. Waar slaat MySQL databasebestanden op Windows op en wat zijn de namen van de bestanden?

  4. MySQL optimaliseren voor ALTER TABLE van InnoDB