gpt4 book ai didi

mysql - 使用 MySQL 获取整数中的零个数

转载 作者:行者123 更新时间:2023-11-29 01:20:09 25 4
gpt4 key购买 nike

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

select count_zeros(number) from dual;
-- when number = 10090, it return 3
-- when number = 10000, it return 4

如何使用 MySQL 查询以最快的方式做到这一点?

最佳答案

您可以比较包含和不包含您要计算的字符的字符串长度。

解决方案使用 LENGTH

-- 0 in 10090: 3
-- 0 in 10000: 4
SELECT
(LENGTH(number) - LENGTH(REPLACE(number, '0', ''))) AS char_count
FROM dual;

更好更安全的解决方案是使用 CHAR_LENGTH函数而不是 LENGTH功能。用CHAR_LENGTH函数,您还可以计算多字节字符(如 §)。

解决方案使用 CHAR_LENGTH

-- § in 100§0: 1
SELECT
(CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '§', ''))) AS char_count
FROM dual;

您还可以扩展上述解决方案以计算使用多个字符的字符串值。

-- 12 in 10120012: 2
SELECT number,
FLOOR((CHAR_LENGTH(number) - CHAR_LENGTH(REPLACE(number, '12', ''))) / CHAR_LENGTH('12')) AS str_count
FROM dual;

demo on dbfiddle.uk


在 MySQL 上你可以 create a function以更简单的方式使用上述逻辑:

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

您可以像这样使用这个新函数 GetStringCount:

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

关于mysql - 使用 MySQL 获取整数中的零个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42001306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com