2016-11-10 68 views
1

我想选择当前月份和接下来的2个月份之间的所有记录,但是我无法这样做,因为年份会从2016年到2017年。如何在接下来的3个月中选择所有记录,包括当前的新记录时

例如。

我想所有的记录,从2016年11月至2017年一月

当前查询(如下所示)我已经一直很好,直到这个月,因为2016年11月+ 2个月= 2017年一月

select * from dateTable 
where month(t2.`END_DATE`) between month(curdate()) and 
month(DATE_ADD(curdate(), INTERVAL 2 MONTH)) 
and year(t2.`END_DATE`) = year(curdate()); 

这将返回0行,因为这不能处理有两年了,2016和2017年

我怎么会去这样做呢?

回答

0

这应该是你所需要的,但也有可能是一些这样做的方法

select * from dateTable 
where `END_DATE` BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') 
        AND LAST_DAY(DATE_ADD(NOW(), INTERVAL 2 MONTH)) 

此查询的结果将证明产生

SELECT DATE_FORMAT(NOW() ,'%Y-%m-01') as from_date, 
     LAST_DAY(DATE_ADD(NOW(), INTERVAL 2 MONTH)) as to_date 
01日期

今天,这将产生

from_date to_date 
2016-11-01 2017-01-31 
+0

太感谢你了RiggsFolly,该诀窍! :d –

0

尝试使用完整日期时间与DATE_ADDDATE_DIFF函数。

select * from dateTable where t2.`END_DATE` 
between DATEADD(month, 
     DATEDIFF(month, 0, getdate() -- get difference to first day 
     ), 0) 
and DATEADD(month, 2, -- add 3 months interval to get first day of third 
     DATEADD(month, 
      DATEDIFF(month, 0, getdate() -- get difference to first day 
     ), 0)) 

如果你不得不从上个月使用DATEADD再次删除的第一天,除去1秒获得23:59:59

相关问题