如何在SQL周报查询中获取上周三至本周二的日期
上周三至本周二日期的SQL获取方案
针对你需要获取上周三与本周二日期的需求,先修正你之前代码的逻辑(推测你可能是把DATEADD误写为DATEDIFF,因为DATEDIFF返回的是时间差而非具体日期),并给出适配的语句:
正确SQL语句
-- 获取上周三 DATEADD(wk, DATEDIFF(wk, 0, GETDATE()) - 1, 3) -- 获取本周二 DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 2)
逻辑说明
DATEDIFF(wk, 0, GETDATE()):计算从SQL默认基准日期(1900-01-01,周日)到当前日期的总周数- 减1代表上一周,加上3天(周日为0,周三对应3)得到上周三
- 当前周数加上2天(周二对应2)得到本周二
关于当前日期为本周二的问题
无需等到次日再尝试。上述语句的逻辑是基于周的固定偏移,不管当前日期是周几,都能精准定位上周三到本周二的区间。你之前调整参数未成功,大概率是偏移天数的对应关系没搞对——SQL中默认一周起始为周日,所以周日=0、周一=1、周二=2、周三=3,以此类推。
如果习惯以周一作为一周起始,可以先设置SET DATEFIRST 1;,此时周一=1,周二=2,周三=3,对应语句调整为:
SET DATEFIRST 1; -- 获取上周三 DATEADD(wk, DATEDIFF(wk, 0, GETDATE()) - 1, 3) -- 获取本周二 DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 2)
内容的提问来源于stack exchange,提问作者anna
相关产品推荐
相关产品推荐

