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

如何调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:04