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

如何编写SQL查询获取指定日历年范围的订单数据?

解决日历年范围的订单查询问题

你的需求是获取当前日期所在年份往前数2个完整日历年的1月1日到当前日期的所有订单,比如当前是2023-10-18时,要覆盖2021-01-01至2023-10-18的订单。之前的语句取的是过去整整3年的区间,不符合要求,以下是两种可行的解决方案:

方案一:精准日期范围截取

SELECT *
FROM ps_orders o
WHERE o.date_add >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 2 YEAR), '%Y-01-01')
  AND o.date_add <= NOW();

逻辑说明:

  • DATE_SUB(NOW(), INTERVAL 2 YEAR):先算出当前日期往前推2年的日期(比如2023-10-18推2年得到2021-10-18)
  • DATE_FORMAT(..., '%Y-01-01'):把这个日期格式化为对应年份的1月1日,也就是2021-01-01,这就是我们要的起始日期
  • o.date_add <= NOW():限定结束日期为当前日期,确保不会包含当前日期之后的订单(如果存在的话)

方案二:基于年份筛选

SELECT *
FROM ps_orders o
WHERE YEAR(o.date_add) >= YEAR(NOW()) - 2
  AND o.date_add <= NOW();

逻辑说明:

  • YEAR(NOW()) - 2:直接获取当前年份减2的数值(比如2023-2=2021)
  • YEAR(o.date_add) >= 2021:筛选出订单年份在2021及之后的记录
  • 同样加上o.date_add <= NOW(),避免包含当前年份中晚于当前日期的订单

两种方案的差异:

  • 方案一直接基于日期范围查询,如果date_add字段有索引,查询效率会更高
  • 方案二更直观,逻辑容易理解,但如果date_add没有索引,性能可能不如方案一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:30:06