Проверка наличия нескольких значений в операторе CASE

Как мне проверить несколько вещей в моем заявлении о случае, не записывая несколько строк, проверяя каждый случай.

Я попробовал это, и это очень уродливо.

Я хочу что-то чистое, как показано ниже, но не могу заставить это работать.

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

person Angelina    schedule 18.06.2014    source источник
comment
вы не можете использовать подстановочный знак% без лайка внутри IN, они должны быть отдельными. Однако это возможно с использованием регулярных выражений. docs.oracle.com/cd/B12037_01/appdev.101/ b10795/adfns_re.htm   -  person xQbert    schedule 18.06.2014
comment
Почему этот подход не работает - вы получаете ошибку или неправильные результаты? То, что вы показали, выглядит нормально, за исключением того, что вы используете подстановочные знаки в IN, которые вы заменяете на OR. Может быть, показ вашей «многострочной» версии прояснит проблему, с которой вы столкнулись?   -  person Alex Poole    schedule 18.06.2014
comment
Да, вы не можете использовать подстановочные знаки (%) в предложении IN, но вы можете использовать функцию регулярного выражения regexp_like() (Oracle 10g и выше). Вот небольшой пример.   -  person Nick Krasnov    schedule 18.06.2014


Ответы (1)


Предполагая, что вы хотите, чтобы подстановочные знаки соответствовали этим знакам процента:

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