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

MySQL周起始日与结束日查询stock最大值结果异常排查

问题根源与解决方案

嘿,我一眼就瞅出问题所在啦!你的查询语句里犯了一个很容易踩的小坑——把日期计算表达式用单引号'包裹起来了。

为什么这会导致错误?

MySQL会把单引号里的内容当成纯字符串字面量,而不是去执行里面的日期计算逻辑。举个例子:

  • 你写的 '(DATE(NOW()) - INTERVAL (WEEKDAY(DATE(NOW()))) DAY)',数据库不会解析这个字符串里的SQL语法,只会把它当作一个普通的字符串值,自然没法匹配到正确的日期范围。
  • 而当你换成固定日期'2018-01-28'时,这个字符串刚好是合法的日期格式,数据库能正确识别并匹配,所以查询就正常了。

修正后的查询语句

你只需要去掉日期计算表达式外面的单引号,让MySQL直接执行这些日期运算即可:

SELECT MAX(stock) 
FROM stockins 
WHERE date >= DATE(NOW()) - INTERVAL WEEKDAY(DATE(NOW())) DAY 
  AND date <= DATE(NOW()) + INTERVAL (6 - WEEKDAY(DATE(NOW()))) DAY;

更清晰的写法(可选)

如果想让代码可读性更高,可以先定义变量存储本周的起止日期:

-- 计算本周一和周日的日期
SET @week_start = DATE(NOW()) - INTERVAL WEEKDAY(DATE(NOW())) DAY;
SET @week_end = DATE(NOW()) + INTERVAL (6 - WEEKDAY(DATE(NOW()))) DAY;

-- 查询本周最大值
SELECT MAX(stock) 
FROM stockins 
WHERE date BETWEEN @week_start AND @week_end;

额外提示

如果你的date字段是datetime类型(包含时分秒),建议用DATE(date)提取日期部分,避免时间范围的干扰:

SELECT MAX(stock) 
FROM stockins 
WHERE DATE(date) >= DATE(NOW()) - INTERVAL WEEKDAY(DATE(NOW())) DAY 
  AND DATE(date) <= DATE(NOW()) + INTERVAL (6 - WEEKDAY(DATE(NOW()))) DAY;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:18:37