2.1 Оператор CASE
В языке SQL есть два способа записи оператора CASE. Первая запись делает его похожим на switch из языка Java, а второй формат больше похож на множественный if-else.
Начнем с первого варианта – аналог switch. Общий формат имеет вид:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
Действительно очень похож на switch, только слова немного другие:
| SQL | Java |
|---|---|
| case x | switch (x) { |
| when value | case value: |
| then result | return result; |
| else result | default: return result; |
| end | } |
Давай переведем пример из Java на язык SQL:
| Java | SQL |
|---|---|
|
|
2.2 Второй вариант оператора CASE
Также есть второй вариант оператора CASE, который, как уже говорилось выше, больше похож на множественный if-else. Общий формат имеет вид:
CASE
WHEN условие1 THEN result1
[WHEN условие2 THEN result2] ...
[ELSE resultN]
END
Тут просто последовательно проверяются условия, если какое-нибудь из них истинно, то вернется указанный результат. Если ни одно из условий не будет истинно, тогда вернется значение указанное в ELSE.
Давай переведем пример из Java на язык SQL:
| Java | SQL |
|---|---|
|
|
|
|
|
|
2.3 Решаем задачу с помощью оператора CASE
Давай запишем какой-нибудь интересный запрос. Помнишь, у нас была задача – добавить слово "EXPIRED!" к названию прошедших задач в таблице task. Ее можно легко сделать с помощью оператора CASE.
Для поля deadline он будет выглядеть как второй вариант оператора CASE:
CASE
WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
ELSE name
END
Пример полного запроса с использованием оператора CASE:
SELECT
id,
emploee_id,
CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
deadline
FROM task
Результат этого запроса будет таким:
| id | emploee_id | name | deadline |
|---|---|---|---|
| 1 | 1 | EXPIRED! Исправить багу на фронтенде | 2022-06-01 |
| 2 | 2 | Исправить багу на бэкенде | 2022-06-15 |
| 3 | 5 | Купить кофе | 2022-07-01 |
| 4 | 5 | Купить кофе | 2022-08-01 |
| 5 | 5 | Купить кофе | 2022-09-01 |
| 6 | (NULL) | Убрать офис | (NULL) |
| 7 | 4 | Наслаждаться жизнью | (NULL) |
| 8 | 6 | Наслаждаться жизнью | (NULL) |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ