2014-06-18 103 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