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

SQL日历is_mtd_all字段计算异常:2020-01-01未正确返回1如何解决

代码缺陷原因

你现有的逻辑多余使用了dayofyear(年度第几天)做判断,完全没有必要,还引入了闰年的兼容问题:
你已经通过datepart(month,[Date])=datepart(month,getdate())限定了待判断日期和当前日期属于同一个月份,直接比较两个日期的「日」部分就可以满足需求,用dayofyear反而会因为平闰年2月天数的差异,导致同月同日的两个日期dayofyear取值不一致。

举个例子:

  • 平年3月1日的dayofyear是第59天
  • 闰年(比如2020年)3月1日的dayofyear是第60天
    如果当前日期是平年的3月1日,判断2020年3月1日时会出现60 <= 59不成立的情况,本该返回1的结果就会返回0。你遇到的2020年1月1日异常,本质上也是错误使用dayofyear做同月日期对比导致的边界问题。

修复方案

直接把判断条件里的dayofyear换成day即可:

[is_mtd_all]  AS (case when datepart(day,[Date])<=datepart(day,getdate()) AND datepart(month,[Date])=datepart(month,getdate()) then (1) else (0) end)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:48:01