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