我是Oacle SQL的新手,我正试图让我的头脑看起来很简单......
说我有这样的选择:
select * from MRCONTRACT2
WHERE CASE
WHEN ("MR_CONTRACT2"."TERM_DATE" < sysdate)
THEN 'Lapsed Contract'
WHEN ("MR_CONTRACT2"."EFF_DATE" > sysdate)
THEN 'Inactive Contract'
ELSE 'Active Contract'
END = 'Active Contract'
where子句实际意味着什么,对我而言,它没有完整的'if'表达式?
答案 0 :(得分:3)
该查询等同于
select *
from mrcontract2
where term_date >= sysdate
and eff_date <= sysdate
CASE语句按顺序进行评估,因此如果任何“case”为真,那么忽略它之后的每个case。当您检查case语句的结果是否与ELSE子句相同时,该语句与所有其他条件相反。
我真的不喜欢WHERE子句中的CASE语句,但它可以作为一种简化逻辑的方法;有一个复杂的CASE语句,你要评估但不想翻译。