Bạn có thể so sánh độ dài chuỗi có và không có ký tự bạn muốn đếm.
Giải pháp sử dụng LENGTH
-- 0 in 10090: 3
-- 0 in 10000: 4
SELECT
(LENGTH(number) - LENGTH(REPLACE(number, '0', ''))) AS char_count
FROM dual;
Giải pháp tốt hơn và an toàn hơn là sử dụng CHAR_LENGTH
thay vì hàm LENGTH
hàm số. Với CHAR_LENGTH
bạn cũng có thể đếm các ký tự nhiều byte (như §
).
Giải pháp sử dụng CHAR_LENGTH
-- § in 100§0: 1
SELECT
(CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '§', ''))) AS char_count
FROM dual;
Bạn cũng có thể mở rộng giải pháp trên để đếm giá trị chuỗi sử dụng nhiều ký tự.
-- 12 in 10120012: 2
SELECT number,
FLOOR((CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '12', ''))) / CHAR_LENGTH('12')) AS str_count
FROM dual;
bản trình diễn trên dbfiddle.uk
Trên MySQL, bạn có thể tạo một hàm để sử dụng logic trên theo cách đơn giản hơn:
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));
Bạn có thể sử dụng chức năng mới này GetStringCount
như thế này:
-- 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;