mySQL - 整个上个月

时间:2013-02-01 13:25:02

标签: mysql sql date between

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

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

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

2 个答案:

答案 0 :(得分:7)

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

您是否了解如何使用>=选择日期范围的开头,并使用<结束?您是否看到我如何使用当月的第一天作为日期范围的结束?这些事情很重要,因为时间戳可能有几天和几天。考虑时间戳'2013-01-31 23:58'。它恰好是在'2012-01-31之后的,所以之间的将无法捕获它。

答案 1 :(得分:1)

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