【问题标题】:Date range in mysqlmysql中的日期范围
【发布时间】:2020-12-13 13:14:14
【问题描述】:

我有一个要求,即需要从特定月份开始检索数据,但仅检索一年。示例是从 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 年之后获取 2019 天和 365 天的数据。我应该如何将选择标准放在 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;

【问题讨论】:

    标签: mysql mysql-8.0


    【解决方案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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 2012-12-08
      • 2014-01-07
      • 2011-01-01
      相关资源
      最近更新 更多