假设我在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查询以最快的方式执行此操作?
您可以使用以下解决方案,比较字符串长度是否包含您想要计算的字符(在您的情况下0) - 解决方案使用LENGTH:
SELECT
(LENGTH(number) - LENGTH(REPLACE(number, '0', ''))) AS zero_count
FROM dual;
-- 10090: 3
-- 10000: 4
Run Code Online (Sandbox Code Playgroud)
§对字符串计算多字节字符(如)的更好解决方案,您可以使用以下解决方案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
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |