【问题标题】:Multiple values in case statement used as right operand of where clause sql oraclecase语句中的多个值用作where子句sql oracle的右操作数
【发布时间】:2018-09-14 11:18:42
【问题描述】:

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

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

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

我无法找到完成此任务的方法。将不胜感激。

【问题讨论】:

  • WHERE子句中使用AND/OR而不是case表达式通常会更好。
  • edit您的问题并添加一些sample data 和基于该数据的预期输出。 Formatted textno screen shots。 (edit 您的问题 - 在 cmets 中邮政编码或其他信息)

标签: sql oracle oracle11g oracle12c


【解决方案1】:

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

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);

【讨论】:

  • 好吧,这似乎符合逻辑,让我试一试,看看它是否能完成我的工作。这肯定是会被接受的答案。感谢您的快速转身!
  • 逻辑似乎有效,我所做的唯一改变是最后一部分,而不是“和日期 TRUNC(sysdate)” 我使用过“和日期
  • @SurajKumar 好的,我更正了。我没有考虑未来的日期,你是对的。
猜你喜欢
  • 2018-11-29
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多