MySQL技术问询:如何获取去年7月至当前日期的数据
查询从去年7月到当前日期的MySQL数据集
没问题,我来给你两种实用的写法,分别适配不同场景:
方法一:高效范围查询(推荐,可利用索引)
这种写法通过构造明确的日期范围来筛选数据,能充分利用created字段的索引,查询效率更高:
SELECT * FROM tableName WHERE created >= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR), '%Y-07-01') AND created <= CURDATE();
逻辑解释:
DATE_SUB(CURDATE(), INTERVAL 1 YEAR):获取当前日期往前推1年的日期(比如今天是2024-09-15,就得到2023-09-15)DATE_FORMAT(..., '%Y-07-01'):把上面的日期格式化为去年的7月1日(即2023-07-01)CURDATE():获取当前日期,作为范围的结束值
如果你的created字段是datetime类型(包含时分秒),想要包含当前时间的最新数据,可以把CURDATE()换成NOW():
SELECT * FROM tableName WHERE created >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 YEAR), '%Y-07-01 00:00:00') AND created <= NOW();
方法二:按年份+月份判断(直观但可能无法用索引)
如果更看重逻辑直观性,也可以直接提取日期的年份和月份来判断:
SELECT * FROM tableName WHERE (YEAR(created) = YEAR(CURDATE()) - 1 AND MONTH(created) >= 7) OR (YEAR(created) = YEAR(CURDATE()) AND MONTH(created) <= MONTH(CURDATE()));
逻辑解释:
- 第一部分:筛选出去年(当前年份-1)中7月及以后的数据
- 第二部分:筛选出今年中当前月份及以前的数据
⚠️ 注意:这种写法因为用函数包裹了created字段,会导致该字段的索引无法被MySQL使用,如果表数据量很大,查询速度会变慢,所以更推荐第一种方法。
内容的提问来源于stack exchange,提问作者Satu Sultana
相关产品推荐
相关产品推荐

