mySQL - 整个上个月

use*_*763 2 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 ) 
Run Code Online (Sandbox Code Playgroud)

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

O. *_*nes 7

BETWEEN 众所周知,日期和时间戳工作不好,因为它的结束日期是错误的.

这就是你需要的:

首先,让我们计算当月的第一天.你有完全正确的.

 DATE_FORMAT(NOW(),'%Y-%m-01')
Run Code Online (Sandbox Code Playgroud)

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

 DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 1 MONTH
Run Code Online (Sandbox Code Playgroud)

现在,我们选择区间内的记录.

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

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