MySQL中如何检查字符全相同及分别统计全零与前缀多零数字
MySQL字符串检查与分类统计解决方案
一、检查字符串所有字符是否完全相同
要判断字符串的所有字符是否一致,有两种简洁的实现方式:
方法1:使用REPLACE函数
将字符串中的第一个字符全部替换为空,若结果为空字符串,则说明所有字符都和第一个字符相同:
SELECT number FROM num WHERE REPLACE(number, SUBSTRING(number, 1, 1), '') = '';
方法2:使用正则表达式REGEXP
生成匹配“第一个字符重复整个字符串”的正则表达式,进行匹配:
SELECT number FROM num WHERE number REGEXP CONCAT('^', SUBSTRING(number, 1, 1), '+$');
二、分类统计全零数字与前缀4个及以上0的数字
你的尝试语句错误在于用number like '0000%0'无法准确识别全零字符串,以下是正确的实现方案:
场景1:按number分组统计(与初始查询逻辑对齐)
同时统计每个number的出现次数,并标记类型:
SELECT number, COUNT(*) AS attempts, CASE WHEN REPLACE(number, '0', '') = '' THEN 20 -- 所有字符都是0,标记为20 WHEN number LIKE '0000%' THEN 2 -- 前缀含4个及以上0但不全为0,标记为2 END AS tag FROM num WHERE number LIKE '0000%' -- 筛选前缀4个0或全零的记录(全零必然满足该条件) GROUP BY number;
场景2:按日期分组统计(对应用户尝试的分组方式)
统计每日两类记录的数量:
SELECT DATE(date) AS stat_date, -- 统计全零记录的数量 COUNT(CASE WHEN REPLACE(number, '0', '') = '' THEN 1 END) AS total_tag20, -- 统计前缀4个及以上0但不全零的记录数量 COUNT(CASE WHEN number LIKE '0000%' AND REPLACE(number, '0', '') != '' THEN 1 END) AS total_tag2 FROM num WHERE number LIKE '0000%' GROUP BY stat_date;
错误分析
你原语句中的number like '0000%0'条件逻辑错误:它仅匹配前缀4个0且末尾为0的字符串,无法区分全零字符串和“前缀4个0但中间/末尾有非0字符”的字符串,必须通过REPLACE(number, '0', '') = ''来精准判断全零字符串。
内容的提问来源于stack exchange,提问作者Pathi
相关产品推荐
相关产品推荐

