2013-10-20 59 views
0

我是新来Oacle SQL,我试图让我的头围绕什么,似乎有什么东西容易...的Oracle SQL Case语句的where子句

说我有一个选择,像这样:

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

回答

3

查询是等同于

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

CASE语句是为了评估,因此,如果任何“情况”是真的,那么之后每一种情况下被忽略。当您检查case语句的结果是否与ELSE语句相同时,该语句与所有其他条件相反。

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

+0

非常感谢你:)我同意不喜欢在where子句中的CASE语句。这很凌乱:) – AshesToAshes