ODBC环境下SQL排除周末:周一返回周五日期的语句修改需求
实现周一返回上周五、其他工作日返回昨日的SQL语句
你可以通过CASE条件判断结合星期数检测来实现这个逻辑,同时建议显式设置一周的起始日为周一,避免不同环境下星期数判断的歧义:
-- 显式设置周一为一周的第一天(避免默认周日为第一天的情况) SET DATEFIRST 1; SELECT CASE WHEN DATEPART(WEEKDAY, CAST(GETDATE() AS DATE)) = 1 -- 当前是周一 THEN DATEADD(DD, -3, CAST(GETDATE() AS DATE)) -- 减去3天得到上周五 ELSE DATEADD(DD, -1, CAST(GETDATE() AS DATE)) -- 其他工作日返回昨日 END AS TargetDate;
逻辑说明:
SET DATEFIRST 1:强制让SQL Server把周一识别为一周的第1天,这样DATEPART(WEEKDAY, ...)返回1代表周一,2代表周二,以此类推到5代表周五。- 当检测到当前是周一(返回值为1)时,直接减去3天,跳过周六和周日,得到上周五的日期。
- 周二到周五时,保持原逻辑减去1天,返回昨日日期。
如果你的环境默认已经是周一为一周起始日,可以省略SET DATEFIRST 1,但保留它能让代码在任何环境下都稳定运行。
内容的提问来源于stack exchange,提问作者OnThaRise
相关产品推荐
相关产品推荐

