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

SQL使用BETWEEN日期范围查询第一季度值返回NULL原因求解

错误原因及解决方案

核心错误点

  • BETWEEN 运算符仅支持两个确定值的范围比较,不识别 % 通配符。% 是 LIKE 模糊查询的专属通配符,你写的 '%-01-01%' 会被识别为普通字符串,和日期类型的 OrderDate 比较时永远不成立,因此 CASE 语句没有符合条件的计算项,SUM 聚合结果自然为 NULL。
  • 你修改后的语句缺少 ELSE 0 分支,就算后续条件修复,当没有符合条件的记录时,SUM 结果依然会返回 NULL,和你原来用 quarter 函数的逻辑不一致。
  • 你写的日期范围没有和当前分组的年份绑定,就算通配符生效,也会统计所有年份的1-3月数据,和按年分组的需求不匹配。

正确改写示例

如果要使用日期范围逻辑实现相同的Q1统计,有两种常用写法:

  1. 直接判断月份范围(最简洁)
FORMAT(sum(case when MONTH(ord2.OrderDate) BETWEEN 1 AND 3 then ord.UnitPrice*ord.Quantity else 0 end), 0) as "quarter1"
  1. 拼接当前年份的Q1起止日期进行比较
FORMAT(sum(case when ord2.OrderDate BETWEEN CONCAT(YEAR(ord2.OrderDate), '-01-01') AND CONCAT(YEAR(ord2.OrderDate), '-03-31') then ord.UnitPrice*ord.Quantity else 0 end), 0) as "quarter1"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:54:02