我目前有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加入一个案例选择,但对我来说并没有成功。
谢谢!
答案 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')
)
两个重要的考虑因素:
'Monday'
,而是'Monday '
,空格可以有所不同。'NLS_DATE_LANGUAGE=AMERICAN'
,所以结果是英文。答案 1 :(得分:1)
case
表达式返回一个值。它不能像where
子句中的问题中提到的那样使用。
使用and
和or
表达您的条件。
SELECT * FROM table
WHERE foo = 'bar'
AND foo2 = 'bar2'
AND (
(TO_CHAR(SYSDATE, 'Day') = 'Monday' AND foo3 = 'bar3') OR foo3 = 'bar3a'
)