FirebirdSQL logo

CASE

Доступно в

DSQL, ESQL.

Оператор CASE возвращает только одно значение из нескольких возможных.Есть два синтаксических варианта:

  • Простой CASE, сравнимый с Pascal case или C switch;

  • Поисковый CASE, который работает как серия операторов “if …​ else if …​ else if”.

Простой CASE
Синтаксис
CASE <test-expr>
  WHEN <expr> THEN <result>
  [WHEN <expr> THEN <result> ...]
  [ELSE <defaultresult>]
END

При использовании этого варианта test-expr сравнивается с первым expr,затем вторым expr и так далее,до тех пор, пока не будет найдено совпадение, и тогда возвращается соответствующий результат.Если совпадений не найдено, то возвращается defaultresult из ветви ELSE.Если нет совпадений, и ветвь ELSE отсутствует, то возвращается значение NULL.

Совпадение эквивалентно оператору “=”, то естьесли test-expr имеет значение NULL, то он не соответствует ни одному из expr, даже тем, которые имеют значение NULL.

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

Example 1. Использование простого CASE
SELECT
  NAME,
  AGE,
  CASE UPPER(SEX)
    WHEN 'M' THEN 'Male'
    WHEN 'F' THEN 'Female'
    ELSE 'Unknown'
  END AS SEXNAME,
  RELIGION
FROM PEOPLE

Сокращённый вид простого оператора CASE используется в функции DECODE.