#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);
Немного грубо и немного медленно, но, похоже, работает. Я открыт, чтобы услышать другие предложения.