You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:筛选ABC列含至少3个≥5数字的字符串行

MySQL查询:筛选包含至少3个≥5数字的分隔字符串行

适用于MySQL 8.0及以上版本(推荐方案)

利用JSON_TABLE函数将分隔字符串拆分为独立行,统计符合条件的数字数量后筛选:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT 
        id, -- 替换为你的表的主键/唯一标识列
        COUNT(*) AS qualified_count
    FROM your_table
    INNER JOIN JSON_TABLE(
        -- 将~分隔的字符串转换为合法JSON数组
        CONCAT('["', REPLACE(ABC, '~', '","'), '"]'),
        '$[*]' COLUMNS(num INT PATH '$')
    ) AS split_nums
    WHERE split_nums.num >= 5
    GROUP BY id
    HAVING qualified_count >= 3
) AS count_result ON t.id = count_result.id;

说明:

  1. 将your_table替换为你的实际表名,id替换为表的主键或唯一标识列(确保能唯一识别每一行)
  2. REPLACE和CONCAT组合将8~1~0~1~0~0~2~0~5~6这类字符串转换为["8","1","0","1","0","0","2","0","5","6"]格式的JSON数组
  3. JSON_TABLE将数组拆分为多行,每行对应一个数字,随后筛选出≥5的数字并按原行分组统计数量
  4. 最后关联原表,只保留统计数量≥3的行

适用于MySQL 5.x版本(无JSON_TABLE支持)

如果无法升级到8.0,可以使用字符串匹配结合计数的方式(注意:此方法需确保数字为0-100的整数):

SELECT *
FROM your_table
WHERE 
    -- 统计开头的数字是否符合条件
    IF(LOCATE('~', ABC) = 0, ABC + 0 >=5, LEFT(ABC, LOCATE('~', ABC)-1) + 0 >=5) +
    -- 统计中间的~X~格式中X≥5的数量
    (LENGTH(ABC) - LENGTH(REGEXP_REPLACE(ABC, '~([5-9]|[1-9][0-9]|100)~', '~'))) / LENGTH('~([5-9]|[1-9][0-9]|100)~') +
    -- 统计结尾的数字是否符合条件
    IF(LOCATE('~', ABC) = 0, 0, RIGHT(ABC, LENGTH(ABC) - LOCATE('~', REVERSE(ABC)) + 1) + 0 >=5)
    >= 3;

说明:

  • 正则~([5-9]|[1-9][0-9]|100)~匹配中间位置的≥5的数字(包含5-9、10-99、100)
  • 通过计算替换前后的长度差,得到中间符合条件的数字数量
  • 单独处理开头和结尾的数字,避免边界匹配问题

内容的提问来源于stack exchange,提问作者sshanmugagani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:33:20