#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;