首页 > 解决方案 > mysql中的日期范围

问题描述

我有一个要求,需要从一个特定的月份开始检索数据,但只能检索一年。示例是从 2019 年 8 月 1 日到一年后的所有数据,即 2020 年 8 月 1 日。月份值可能会有所不同,因此在此示例中是 8 月,但也可能是 5 月或 9 月。

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;

标签: mysqlmysql-8.0

解决方案


这就是我想出的,

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);

有点粗略,有点慢,但它似乎正在工作。我愿意听取其他建议。


推荐阅读