结合状态参数实现日期过滤的作业报表WHERE子句修改咨询
作业报表WHERE子句修改方案
核心逻辑
保留原有的状态筛选规则,针对「关闭」状态的作业额外叠加日期范围校验,非关闭状态的作业不受日期参数影响,同时兼容用户未指定日期范围的场景。
假设你新增的关闭日期范围参数为@ClosedDateStart(起始日期)、@ClosedDateEnd(结束日期),参数未选择时默认传NULL。
最终WHERE子句
WHERE JobStatus IN (@Status) AND ( -- 非关闭状态作业直接放行 JobStatus != '关闭' OR ( -- 关闭状态作业需匹配日期范围 JobStatus = '关闭' AND (ClosedDate >= @ClosedDateStart OR @ClosedDateStart IS NULL) AND (ClosedDate <= @ClosedDateEnd OR @ClosedDateEnd IS NULL) ) )
适配调整说明
- 如果你的状态枚举里关闭状态的取值不是中文「关闭」,替换成实际值即可,比如英文
Closed。 - 如果你的报表工具中未选择的日期参数默认返回值不是
NULL(比如是1900-01-01这类占位值),把上述语句中的IS NULL判断替换为对应占位值的匹配逻辑即可。 - 如果需要强制用户选择关闭作业的日期范围,删除
OR @ClosedDateStart IS NULL和OR @ClosedDateEnd IS NULL两个分支即可。
效果验证示例
当用户勾选状态为「打开、关闭」,同时指定关闭日期范围为2024-01-01至2024-06-30时,查询会返回所有打开状态的作业,加上2024年上半年关闭的作业,完全匹配需求。
内容的提问来源于stack exchange,提问作者hjReads
相关产品推荐
相关产品推荐

