Как избежать повторения части условий в конструкции CASE в MySQL?

129
01 февраля 2021, 16:30

Только начал знакомство с MySQL. Поясните почему я могу сделать так

SELECT `Дата заключения` AS Подписан,
    CASE
        WHEN month(`Дата заключения`) BETWEEN 3 AND 5 THEN 'Весна'
        WHEN month(`Дата заключения`) BETWEEN 6 AND 8 THEN 'Лето'
        WHEN month(`Дата заключения`) BETWEEN 9 AND 11 THEN 'Осень'
        ELSE 'Зима'
    END AS Сезон
    FROM договор
    ORDER BY Подписан DESC;

Но не могу сделать так

SELECT `Дата заключения` AS Подписан,
    CASE month(`Дата заключения`)
        WHEN BETWEEN 3 AND 5 THEN 'Весна'
        WHEN BETWEEN 6 AND 8 THEN 'Лето'
        WHEN BETWEEN 9 AND 11 THEN 'Осень'
        ELSE 'Зима'
    END AS Сезон
    FROM договор
    ORDER BY Подписан DESC;

То есть вопрос в том, как написать вычисление месяца один раз.

Answer 1

По стандарту SQL. Сокращенный CASE допускает только сравнение с конкретными значениями и только на равенство.

Answer 2

как написать вычисление месяца один раз

Можете, конечно, попробовать использовать переменную:

SELECT `Дата заключения` AS Подписан,
    CASE
        WHEN (@month:=month(`Дата заключения`)) BETWEEN 3 AND 5 THEN 'Весна'
        WHEN @month BETWEEN 6 AND 8 THEN 'Лето'
        WHEN @month BETWEEN 9 AND 11 THEN 'Осень'
        ELSE 'Зима'
    END AS Сезон
FROM договор
ORDER BY Подписан DESC;

Но, во-первых, профит копеечный, фиг заметишь, во-вторых, сервер не дурак, и скорее всего сам выполнит вычисление только один раз (он же формализует выражения).

Хотя я бы вообще сделал так:

SELECT `Дата заключения` AS Подписан,
    ELT(1+(month(`Дата заключения`) DIV 3), 'Зима', 'Весна', 'Лето', 'Осень', 'Зима') AS Сезон
FROM договор
ORDER BY Подписан DESC;
READ ALSO
Расчет кол-во по условию

Расчет кол-во по условию

При на писании запроса возникла следующая проблема: В столбце "A" есть одно кол-во в одном месте "3264" оно всегда одинаковое в столбце "Б" есть...

122
экспорт товаров из базы в exccel

экспорт товаров из базы в exccel

делаю экспорт товаров из базы в exccel c помощью PHPExcel

122
Как быть с большим объемом данных?

Как быть с большим объемом данных?

Имеется файл примерно на 700 000 записей, мне необходимо периодически его проверять, если есть изменения то делаю update в базу,если нет то записываю...

127
Не работает авторизация на php

Не работает авторизация на php

У меня не получается сделать авторизацию на сайте! Регистрирует у меня все хорошо, а вот войти на сайт не хочет! Я пользуюсь функцией md5() и у меня...

133