如何基于星期几修改SQL Server中的查询运行逻辑?
自动切换工作日与周一的日期范围逻辑实现
直接用SQL Server的日期判断函数结合条件赋值,就能替代手动注释/取消注释的操作,实现自动切换逻辑:
-- 统一设置周一为每周起始日,避免不同环境DATEFIRST设置差异 SET DATEFIRST 1; DECLARE @STARTDATE DATE, @PREV15STARTDATE DATE; -- 根据当天是否为周一自动赋值 SELECT @STARTDATE = CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 1 THEN DATEADD(DAY, -3, GETDATE()) ELSE DATEADD(DAY, -1, GETDATE()) END, @PREV15STARTDATE = CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 1 THEN DATEADD(DAY, -17, GETDATE()) ELSE DATEADD(DAY, -15, GETDATE()) END; -- 后续SELECT语句直接使用这两个变量过滤时间范围即可 -- SELECT * FROM your_table WHERE ACTIVITY_CREATE_DATE_TIME BETWEEN @PREV15STARTDATE AND @STARTDATE
逻辑说明
SET DATEFIRST 1:将周一设为每周的第一天,确保DATEPART(WEEKDAY, GETDATE())返回1时代表周一,规避不同服务器默认星期起始日(如周日)带来的判断误差。- 条件赋值规则:
- 当天是周一:
@STARTDATE取当前日期减3天(对应上周五),@PREV15STARTDATE取当前日期减17天(匹配15天前的范围调整)。 - 非周一:保持原逻辑,
@STARTDATE取前一天,@PREV15STARTDATE取前15天。
- 当天是周一:
内容的提问来源于stack exchange,提问作者Nora Delgado
相关产品推荐
相关产品推荐

