case 语句中的多个值用作 where 子句 sql oracle 的右操作数



我需要你的帮助来解决问题,我在谷歌上搜索了一些,但无法找到具体的答案。我们有一个从星期一到星期五运行的工作,直到现在在星期一运行时,我们过去常常获取星期五的报告,而在所有其他日子,报告都是为前一天生成的。此行为是使用以下查询实现的,字段选择是任意的:

select field1, field2... from table where date = (
case when TO_CHAR(TRUNC(sysdate), 'DY') = 'MON' then TRUNC(sysdate - 3)        
else (TRUNC(sysdate-1)) END);

现在要求发生了变化,我们需要在星期一运行时显示周五、周六和周日所有三天的结果。

我无法找到完成此操作的方法。将不胜感激任何帮助。

我认为,在条件中将=符号更改为>=符号并添加另一个符号以排除当前日期就足够了:

select field1, field2... from table 
where date >= (
case when TO_CHAR(TRUNC(sysdate), 'DY') = 'MON' then TRUNC(sysdate - 3)        
else (TRUNC(sysdate-1)) END)
and date < TRUNC(sysdate);

最新更新