如何调整MySQL查询以获取本周一至下周日的数据?
解决MySQL查询本周一至下周日数据的问题
我来帮你修正这个查询语句,核心问题是你原来的结束日期计算逻辑错误,导致结果只能截止到当前日期。
正确的查询语句
SELECT * FROM spec_roaster WHERE DATE(date) BETWEEN -- 获取当前周的周一 DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND -- 获取下周日:当前周的周一往后推13天 DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 13 DAY) ORDER BY date ASC;
关键逻辑拆解
计算本周一:
DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
MySQL的WEEKDAY()函数返回值对应:0=周一, 1=周二, ..., 6=周日。用当前日期减去这个索引值,就能精准定位到当前周的第一天(周一)。比如今天是周四(索引3),减3天就是本周一。计算下周日:
从本周一到下周日总共涵盖14天(周一到本周日7天,下周一到下周日又7天),给本周一加上13天,就能得到下周日的日期(因为当天算第0天)。
更简洁的等价写法
如果不想嵌套函数,也可以直接计算下周日的日期:
SELECT * FROM spec_roaster WHERE DATE(date) BETWEEN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND DATE_ADD(CURDATE(), INTERVAL (13 - WEEKDAY(CURDATE())) DAY) ORDER BY date ASC;
这里13 - WEEKDAY(CURDATE())直接算出当前日期到下周日的天数,比如今天是周四(索引3),13-3=10天,今天加10天就是下周日。
你原来写法的问题所在
你之前的DATE_ADD部分用了和计算周一相同的偏移量(WEEKDAY(NOW())+7) % 7,这相当于给周一加上「当前日期距离周一的天数」,结果就是当前日期(比如今天周四,就截止到周四),所以查询结果只能到今天为止,这就是为什么你看不到之后的数据。
内容的提问来源于stack exchange,提问作者Vaulient
相关产品推荐
相关产品推荐

