【问题标题】:mySQL - Whole of last monthmySQL - 整个上个月
【发布时间】:2013-02-01 13:25:02
【问题描述】:

我正在尝试使用以下语句检查上个月发生的所有记录。

Select  *  from statistics 
where statistics_date  
BETWEEN date_format(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') 
AND last_day(NOW() - INTERVAL 1 MONTH ) 

但是,选择不包括最后一天。我想要的是从月初到最后一秒。

【问题讨论】:

    标签: mysql sql date between


    【解决方案1】:

    BETWEEN 对于日期和时间戳的工作是出了名的糟糕,因为它的结束日期是错误的。

    这是你需要的:

    首先,让我们计算当前月份的第一天。你说的完全正确。

     DATE_FORMAT(NOW(),'%Y-%m-01')
    

    接下来,我们计算上个月的第一天:

     DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 1 MONTH
    

    现在,我们选择位于区间内的记录。

    Select * 
      from statistics 
     where statistics_date   >=   DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 1 MONTH
       and statistics_date   <    DATE_FORMAT(NOW(),'%Y-%m-01')
    

    您是否看到日期范围的开头是如何以&gt;= 选择的,而以&lt; 结尾的?您是否看到我如何使用本月的第一天作为日期范围的结束?这些事情很重要,因为时间戳可以包含日期和时间。考虑时间戳“2013-01-31 23:58”。它恰好是 after '2012-01-31' 所以 between 不会捕捉到它。

    【讨论】:

      【解决方案2】:

      where MONTH(statistics_date) = MONTH(NOW()) - 1

      【讨论】:

      • 这只考虑同一个月,而不是同一年。
      • 'ang on。这在二月有效,但在一月无效。它还在多年数据集上出错。因此投反对票。
      猜你喜欢
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多