Перейти к основному содержимому
Версия: 2.0.x

case

CASE — это условное выражение. Оно возвращает результат из предложения THEN, если условие в предложении WHEN истинно. Если ни одно из условий не является истинным, возвращается результат из необязательного предложения ELSE. Если ELSE отсутствует, возвращается NULL.

Синтаксис

Выражение CASE имеет две формы:

  • Простой CASE
CASE expression
WHEN expression1 THEN result1
[WHEN expression2 THEN result2]
...
[WHEN expressionN THEN resultN]
[ELSE result]
END

Для этого синтаксиса expression сравнивается с каждым выражением в предложении WHEN. Если найдено равное выражение, возвращается результат из предложения THEN. Если равное выражение не найдено, возвращается результат из предложения ELSE, если ELSE присутствует.

  • Поисковый CASE
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
...
[WHEN conditionN THEN resultN]
[ELSE result]
END

Для этого синтаксиса каждое условие в предложении WHEN вычисляется до тех пор, пока одно из них не станет истинным, и возвращается соответствующий результат из предложения THEN. Если ни одно условие не является истинным, возвращается результат из предложения ELSE, если ELSE присутствует.

Первый CASE эквивалентен второму следующим образом:

CASE WHEN expression = expression1 THEN result1
[WHEN expression = expression2 THEN result2]
...
[WHEN expression = expressionN THEN resultN]
[ELSE result]
END

Параметры

  • expressionN: выражение для сравнения. Несколько выражений должны быть совместимы по типам данных.

  • conditionN: условие, которое может быть вычислено в значение типа BOOLEAN.

  • resultN должны быть совместимы по типам данных.

Возвращаемое значение

Возвращаемое значение имеет общий тип всех типов в предложении THEN.

Примеры

Предположим, таблица test_case содержит следующие данные:

CREATE TABLE test_case(
name STRING,
gender INT,
) DISTRIBUTED BY HASH(name);

INSERT INTO test_case VALUES
("Andy",1),
("Jules",0),
("Angel",-1),
("Sam",null);

SELECT * FROM test_case;
+-------+--------+
| name | gender |
+-------+--------+
| Angel | -1 |
| Andy | 1 |
| Sam | NULL |
| Jules | 0 |
+-------+--------+-------+

Использование простого CASE

  • ELSE указан, и результат из ELSE возвращается, если не найдено равное выражение.
mysql> select gender, case gender
when 1 then 'male'
when 0 then 'female'
else 'error'
end gender_str
from test_case;
+--------+------------+
| gender | gender_str |
+--------+------------+
| NULL | error |
| 0 | female |
| 1 | male |
| -1 | error |
+--------+------------+
  • ELSE не указан, и NULL возвращается, если ни одно условие не является истинным.
select gender, case gender
when 1 then 'male'
when 0 then 'female'
end gender_str
from test_case;
+--------+------------+
| gender | gender_str |
+--------+------------+
| 1 | male |
| -1 | NULL |
| NULL | NULL |
| 0 | female |
+--------+------------+

Использование поискового CASE без указания ELSE

mysql> select gender, case when gender = 1 then 'male'
when gender = 0 then 'female'
end gender_str
from test_case;
+--------+------------+
| gender | gender_str |
+--------+------------+
| NULL | NULL |
| -1 | NULL |
| 1 | male |
| 0 | female |
+--------+------------+

Keywords

case when, case, case_when, case...when