Диапазон дат в mysql

#mysql #mysql-8.0

#mysql #mysql-8.0

Вопрос:

У меня есть требование, при котором данные должны быть восстановлены, начиная с определенного месяца, но только за период в несколько лет. Примером могут служить все данные, датированные с 1 августа 2019 года по год спустя, что будет 1 августа 2020 года. Значение месяца может меняться, поэтому в этом примере это август, но это может быть и май или сентябрь.

 SELECT 
    *
FROM
    Reports
WHERE
  Fromdate BETWEEN '2019-08-01' AND DATE_ADD('2019-08-01', INTERVAL 365 DAY)
ORDER BY dateFrom ASC;
 

Здесь between будет собирать данные только за 2019 год и 365 дней спустя, но 2019 год включен. Как я должен поместить критерии выбора в предложение between, чтобы оно было динамическим? Я думаю в соответствии с приведенными ниже строками, где я бы объявил переменную для месяца, но я не уверен, как указать 365 дней с этого месяца.

 set @monthSelected = 8; -- August

SELECT 
    *
FROM
   Reports
WHERE
   month(Fromdate) = @monthSelected
   and Fromdate BETWEEN '2019-08-01' AND DATE_ADD('2019-08-01', INTERVAL 365 DAY)
ORDER BY dateFrom ASC;
 

Ответ №1:

Это то, что я придумал,

 set @curYear = 2019 ;-- concat("'",Year(now()));
set @monthSelected = '10';

set @dateF = concat(@curYear,'-',@monthSelected,'-01',"'") ;

SELECT 
    *
FROM
    Reports
WHERE
  Fromdate BETWEEN @dateF AND DATE_ADD(@dateF , INTERVAL 365 DAY);
 

Немного грубо и немного медленно, но, похоже, работает. Я открыт, чтобы услышать другие предложения.