2014-06-18 129 views
0

如何在我的case語句中檢查多個事項而不寫多行,檢查每個案例。檢查CASE語句中的多個值

我試過這個,它很醜陋。

我想要下面的東西乾淨,但不能使其工作。

select CASE 
      WHEN (UPPER(NAME) IN ('%AVG%', '%AVERAGE%') AND 
       FORMATTED_ENTRY NOT IN('<', '>')) 
      THEN FORMATTED_ENTRY END actual_avg 
    FROM VALUES_TABLE 
+1

沒有像他們必須是獨立的IN內你不能做一個通配符%。然而,這可能會使用正則表達式。 http://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm – xQbert

+0

爲什麼沒有這種方法的工作 - 你得到一個錯誤,或錯誤的結果?你顯示的內容看起來不錯,除了你在'IN'中使用通配符 - 你用'OR'代替。也許顯示你的'多行'版本將澄清你遇到的問題? –

+3

是的,你不能在'IN'子句中使用通配符('%'),但你可以做的是使用'regexp_like()'正則表達式函數(Oracle 10g及以上)。 [這是一個小例子](http://sqlfiddle.com/#!4/d41d8/31649)。 –

回答

2

假設你想那些百分號通配符匹配:

CASE WHEN (
      (UPPER(NAME) LIKE '%AVG%' OR UPPER(NAME) LIKE '%AVERAGE%') 
      AND FORMATTED_ENTRY NOT IN('<', '>') 
     ) 
     THEN FORMATTED_ENTRY END actual_avg