2.1 Изявление CASE
Има два начина да напишете израз в SQL CASE. Първият запис изглежда като превключване от езика Java, докато вторият формат е по-скоро като множествено число if-else.
Нека започнем с първия вариант - аналог на превключвателя. Общият формат е:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
Наистина много прorча на switch, само думите са малко по-различни:
| SQL | Java |
|---|---|
| случай х | превключвател (x) { |
| кога стойност | стойност на регистъра: |
| тогава резултат | връщане на резултат; |
| иначе резултат | по подразбиране: връща резултат; |
| край | } |
Нека преведем пример от Java в SQL:
| Java | SQL |
|---|---|
|
|
2.2 Втора version на оператора CASE
Има и втора version на оператора CASE, която, Howто бе споменато по-горе, прorча повече на множествено число if-else. Общият формат е:
CASE
WHEN condition 1 THEN result1
[WHEN condition 2 THEN result2] ...
[ELSE resultN]
END
Тук условията просто се проверяват последователно, ако някое от тях е вярно, тогава посоченият резултат ще бъде върнат. Ако нито едно от условията не е вярно, тогава стойността, посочена в ELSE.
Нека преведем пример от Java в SQL:
| Java | SQL |
|---|---|
|
|
|
|
|
|
2.3 Решете проблема с помощта на израза CASE
Нека напишем няHowво интересно запитване. Не забравяйте, че имахме задача - да добавим думата "ИЗТЕКЛО!" към името на минали задачи в tableта със задачи . Може лесно да се направи с CASE.
За полето за краен срок ще изглежда като втората version на извлечението 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
Резултатът от тази заявка ще бъде:
| document за самоличност | Emploee_id | име | краен срок |
|---|---|---|---|
| 1 | 1 | ПРОСРОЧЕН! Коригиране на грешка във фронтенда | 2022-06-01 |
| 2 | 2 | Коригиране на грешка в бекенда | 2022-06-15 |
| 3 | 5 | Купи кафе | 2022-07-01 |
| 4 | 5 | Купи кафе | 2022-08-01 |
| 5 | 5 | Купи кафе | 2022-09-01 |
| 6 | (НУЛА) | Почистете офиса | (НУЛА) |
| 7 | 4 | Наслаждавай се на живота | (НУЛА) |
| 8 | 6 | Наслаждавай се на живота | (НУЛА) |
GO TO FULL VERSION