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

MySQL中删除含早于最近2天时间戳区间的scheduled_jobs_v2记录

删除包含早于最近2天时间戳的记录

方法1:MySQL 8.0及以上版本(推荐,支持JSON_TABLE)

先计算最近2天的Unix时间戳阈值,通过JSON_TABLE拆分逗号分隔的intervals字段为单独的时间戳行,只要存在任意一个时间戳小于阈值,就删除对应记录:

DELETE FROM scheduled_jobs_v2
WHERE EXISTS (
    SELECT 1
    FROM JSON_TABLE(
        -- 把逗号分隔字符串转成JSON数组格式
        CONCAT('["', REPLACE(intervals, ',', '","'), '"]'),
        '$[*]' COLUMNS(ts BIGINT PATH '$')
    ) AS split_ts
    WHERE split_ts.ts < UNIX_TIMESTAMP(NOW() - INTERVAL 2 DAY)
);

方法2:低版本MySQL(无JSON_TABLE支持)

利用正则表达式匹配字段中是否存在小于阈值的时间戳。先定义阈值变量,再构造正则规则匹配符合条件的记录:

-- 计算最近2天的Unix时间戳阈值
SET @threshold = UNIX_TIMESTAMP(NOW() - INTERVAL 2 DAY);

DELETE FROM scheduled_jobs_v2
WHERE 
    -- 前后加逗号避免部分数字匹配错误
    CONCAT(',', intervals, ',') 
    REGEXP 
    -- 匹配两种情况:位数比阈值少的数字,或位数相同但数值更小的数字
    CONCAT(',[0-9]{1,', LENGTH(@threshold)-1, '},|,', '[0-9]{', LENGTH(@threshold), '}(?<![', @threshold, '-9]{', LENGTH(@threshold), '}),');

重要提示

  • 删除前务必验证:把DELETE替换成SELECT *,先确认要删除的记录是否符合预期,防止误删
  • 若intervals存在空值或非数字内容,建议添加过滤条件:AND intervals IS NOT NULL AND intervals REGEXP '^[0-9,]+$'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:25:00