Как использовать простой/короткий синтаксис Postgres с несколькими условиями?

#sql #postgresql #conditional-statements #case

Вопрос:

Я знаю, что с помощью выражения случая Postgres вы можете упростить его до:

 SELECT a,
       CASE a WHEN 1 THEN 'one'
              WHEN 2 THEN 'two'
              ELSE 'other'
       END
    FROM test;
 

…так что вам не нужно писать и т. Д…

 CASE
WHEN a = 1 THEN ''
WHEN a = 2 THEN ''
.
..
...
WHEN a = 99 or a = 100 THEN ''
ELSE '' END
 

Но есть ли способ сделать это при нескольких условиях с помощью ключевого слова, такого как ILIKE или LIKE? Т. Е.

 SELECT a,
       CASE a WHEN LIKE '1' or LIKE 'one'  THEN 'one'
              WHEN LIKE '2' and (LIKE 'two' or LIKE 'too') THEN 'two'
              ELSE 'other'
       END
    FROM test;
 

Очевидно, что это выше не работает, и я пробовал некоторые другие варианты, но не смог заставить его работать (если это возможно)?

Ответ №1:

Нет, краткий CASE синтаксис работает только для одного условия для каждой ветви, и сравнение должно быть с = оператором. Используйте другой синтаксис для того, что вы хотите.

Комментарии:

1. большое вам спасибо

Ответ №2:

Вы можете использовать оператор регулярных выражений Postgres здесь:

 SELECT a,
       CASE WHEN a ~ '^(1|one)



THEN 'one'
WHEN a ~ '^(2|two)

THEN 'two'
ELSE 'other'
END
FROM test;