sql >> Database teknologi >  >> RDS >> Mysql

Få optælling af nuller i et heltal ved hjælp af MySQL

Du kan sammenligne strenglængden med og uden det tegn, du vil tælle.

Løsning ved hjælp af LÆNGDE

-- 0 i 10090:3-- 0 i 10000:4SELECT (LENGTH(tal) - LENGTH(REPLACE(tal, '0', ''))) AS char_countFROM dual; 

En bedre og mere sikker løsning er at bruge CHAR_LENGTH funktion i stedet for LENGTH fungere. Med CHAR_LENGTH funktion kan du også tælle multi-byte tegn (som § ).

Løsning ved hjælp af CHAR_LENGTH

-- § i 100§0:1SELECT (CHAR_LENGTH(tal) - CHAR_LENGTH(REPLACE(tal, '§', ''))) AS char_countFROM dual; 

Du kan også udvide ovenstående løsning til at tælle for en strengværdi ved hjælp af flere tegn.

-- 12 i 10120012:2SELECT nummer, FLOOR((CHAR_LENGTH(tal) - CHAR_LENGTH(REPLACE(tal, '12', ''))) / CHAR_LENGTH('12')) AS str_countFROM dual;

demo på dbfiddle.uk

På MySQL kan du oprette en funktion at bruge ovenstående logik på en enklere måde:

CREATE FUNCTION GetStringCount(strValue VARCHAR(255), strSearchValue VARCHAR(255))RETURNER INT DETERMINISTIC NO SQLRETURN FLOOR((CHAR_LENGTH(strValue) - CHAR_LENGTH(REPLACE(strValue)TH, 'CHAR_LENGTH) (strSearchValue)); 

Du kan bruge denne nye funktion GetStringCount sådan her:

-- eksempel til at tælle ikke-multi-byte tegn (her 0).-- 0 i 10090:3-- 0 i 10000:4SELECT nummer, GetStringCount(tal, '0') AS strCountFROM dual; -- eksempel for at tælle multi-byte tegn (her §).-- § i 100§0:1SELECT tal, GetStringCount(tal, '§') SOM strCountFROM dual;-- eksempel for at tælle en streng med flere tegn.-- 12 i 10120012:2SELECT nummer, GetStringCount(tal, '12') AS strCountFROM dual;

  1. hvor i mysql klausul

  2. Sikkerhedskopier en enkelt tabel med dens data fra en database i sql server 2008

  3. Dynamiske pivotkolonner i SQL Server

  4. Hvilken er hurtigere:Korrelerede underforespørgsler eller join?