MySQL如何查询上月22日至当月21日的所有符合条件数据
MySQL动态筛选上月22日至当月21日交易记录的查询方案
针对需求我们可以通过MySQL内置时间函数自动计算区间边界,不需要手动传入固定日期,适配任意当前时间的查询需求:
时间计算逻辑说明
- 区间起始日期(上月22日):先取当月1日,往前推1个月得到上月1日,再加21天即为上月22日
- 区间结束日期(当月21日):当月1日加20天即为当月21日
场景1:Transaction_date为DATE类型(仅存储日期,无时分秒)
直接使用BETWEEN匹配即可:
SELECT * FROM 你的业务表名 WHERE Transaction_date BETWEEN -- 计算上月22日 DATE_ADD(DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH), INTERVAL 21 DAY) AND -- 计算当月21日 DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 20 DAY);
场景2:Transaction_date为DATETIME/TIMESTAMP类型(包含时分秒)
为避免遗漏当月21日00:00:01到23:59:59的记录,调整结束边界为当月22日0点,用小于号判断:
SELECT * FROM 你的业务表名 WHERE Transaction_date >= DATE_ADD(DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH), INTERVAL 21 DAY) AND Transaction_date < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 21 DAY);
逻辑验证语句
你可以先执行下面的语句确认时间计算结果是否符合预期:
SELECT DATE_ADD(DATE_SUB(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH), INTERVAL 21 DAY) AS 区间起始日期_上月22日, DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 20 DAY) AS 区间结束日期_当月21日, DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 21 DAY) AS DATETIME类型结束边界_当月22日0点;
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

