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
相关产品推荐
相关产品推荐

