2013-10-20 220 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