使用MySQL获取整数的零数

Lam*_*mar 2 mysql

假设我在MySQL(10090)中有一个整数值.我需要计算该数字中所有出现的零位数.因此对于前一种情况,它将返回3:

select count_zeros(number) from dual;
-- when number = 10090, it return 3
-- when number = 10000, it return 4
Run Code Online (Sandbox Code Playgroud)

如何使用MySQL查询以最快的方式执行此操作?

Seb*_*sch 6

您可以使用以下解决方案,比较字符串长度是否包含您想要计算的字符(在您的情况下0) - 解决方案使用LENGTH:

SELECT 
   (LENGTH(number) - LENGTH(REPLACE(number, '0', ''))) AS zero_count
FROM dual;
-- 10090: 3
-- 10000: 4
Run Code Online (Sandbox Code Playgroud)

演示: http ://sqlfiddle.com/#!9/4262b6/3/0

§对字符串计算多字节字符(如)的更好解决方案,您可以使用以下解决方案CHAR_LENGTH:

SELECT 
    (CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '0', ''))) AS zero_count
FROM dual;
-- 10090: 3
-- 10000: 4
Run Code Online (Sandbox Code Playgroud)

demo(带字符串示例): http ://sqlfiddle.com/#!9/b11ee2/2/1


在MySQL上,您还可以创建一个函数,以更简单的方式使用它:

CREATE FUNCTION getCharCount (colValue VARCHAR(255), searchValue CHAR(1)) 
RETURNS INT DETERMINISTIC
RETURN (CHAR_LENGTH(colValue) - CHAR_LENGTH(REPLACE(colValue, searchValue, '')));
Run Code Online (Sandbox Code Playgroud)

通过使用此函数(getCharCount),您可以使用以下查询:

SELECT number, getCharCount(number, '0') AS charCount FROM dual;
-- 10090: 3
-- 10000: 4
Run Code Online (Sandbox Code Playgroud)

演示: http ://sqlfiddle.com/#!9/a550e9/1/0