Where子句中的Oracle SQL Case语句

时间:2013-10-20 12:32:10

标签: sql oracle

我是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'表达式?

1 个答案:

答案 0 :(得分:3)

该查询等同于

select *
  from mrcontract2
 where term_date >= sysdate
   and eff_date <= sysdate

CASE语句按顺序进行评估,因此如果任何“case”为真,那么忽略它之后的每个case。当您检查case语句的结果是否与ELSE子句相同时,该语句与所有其他条件相反。

我真的不喜欢WHERE子句中的CASE语句,但它可以作为一种简化逻辑的方法;有一个复杂的CASE语句,你要评估但不想翻译。