使用AND的SQL语句取决于星期几

时间:2016-04-24 23:55:14

标签: sql oracle

我目前有2个不同的sql脚本需要运行,具体取决于星期几。我试图找到一种方法将它们合二为一,并有逻辑来检查它是星期几,并根据它进行适当的更改。

所以基本结构是:

SELECT * FROM table
WHERE foo = 'bar'
AND foo2 = 'bar2'
AND foo3 = 'bar3';

唯一的区别是如果它是星期一,其中一个AND案件需要改变。

所以我需要的伪代码看起来像:

SELECT * FROM table
WHERE foo = 'bar'
AND foo2 = 'bar2'

if day = 'Monday' then 
AND foo3 = 'bar3'
else 
AND foo3 = 'bar3a';

有什么想法吗?我尝试根据this加入一个案例选择,但对我来说并没有成功。

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为正确的逻辑是:

WHERE foo = 'bar' AND
      foo2 = 'bar2'
      ( (TO_CHAR(SYSDATE, 'Dy') = 'Mon' AND foo3 = 'bar3') ) OR
        (TO_CHAR(SYSDATE, 'Dy') <> 'Mon' AND foo3 = 'bar3a')
      )

两个重要的考虑因素:

  • 这将检查星期一和非星期一。
  • 这使用日期缩写而不是全名。 Oracle填充日期名称,因此结果不是'Monday',而是'Monday ',空格可以有所不同。
  • 正如Thorstein所提到的,你可以添加第三个参数'NLS_DATE_LANGUAGE=AMERICAN',所以结果是英文。

答案 1 :(得分:1)

case表达式返回一个值。它不能像where子句中的问题中提到的那样使用。

使用andor表达您的条件。

SELECT * FROM table
WHERE foo = 'bar'
AND foo2 = 'bar2'
AND (
     (TO_CHAR(SYSDATE, 'Day') = 'Monday' AND foo3 = 'bar3') OR foo3 = 'bar3a'
    )