Mysql — получить сезон из текущего месяца

#mysql

#mysql

Вопрос:

У меня есть следующая таблица сезонов:

 | id  | name   | start_month | end_month |
------------------------------------------
| 101 | Summer | 12          | 2         |
| 102 | Winter | 6           | 8         |
| 103 | Spring | 9           | 11        |
| 104 | Fall   | 3           | 5         |
 

Мне нужно получить сезон по месяцам. Допустим, текущий месяц равен 2 (февраль), я хочу, чтобы результатом было лето.

Я могу заставить работать другие сезоны, просто указав условие where start_month >= 4 and end_month <= 4 . Но это не будет работать с летом, так как сезон переходит в следующий год.

Что мне нужно сделать, чтобы справиться со случаем лета?

Одним из решений, о котором я подумал, было использовать даты вместо номера месяца, например 1980-12-01 , и использовать between функцию, но это становится немного сложным для пользователя.

Было бы здорово, если бы он мог работать только с номерами месяцев.

Комментарии:

1. Как я вижу, это не зависит от года. Вы можете извлечь месяц из даты и сравнить.

2. Вы говорите о втором решении с использованием дат?

3. Февраль — это просто. Январь — более интересная проблема.

4. Решение должно быть одинаковым для обоих и даже работать для других сезонов. Вы не можете сказать current month = end month , что это решено. Февраль — это просто пример.

5. Возможно, проще иметь таблицу seaons, содержащую 12 месяцев

Ответ №1:

Вы могли бы сделать:

 (month(d) between start_month and end_month) or 
      (start_month>end_month and (month(d)>=start_month or month(d)<=end_month))
 

См. db-fiddle

Комментарии:

1. Я думал о чем-то подобном либо внутри двух месяцев, либо вне их обоих.