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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:04