按月选择数据sql

时间:2015-07-05 17:29:21

标签: sql ms-access ms-access-2010

我有一张包含以下内容的表:

Product_ID (number),
Product_Name (varchar),
Expired_Date (datetime)

我需要选择将在未来六个月内过期的产品。我已经创建了一个语句,它没有给我一个错误信息,但我猜它不起作用,因为它没有返回任何结果。

声明:

SELECT prod.Product_ID, prod.Product_Name, prod.Expired_Date
WHERE (month(prod.expired_date)) - month(date()) = 6

我哪里出错了?

其他问题:

我希望也会选择将在本月的第六个月过期的记录。例如,从现在开始的六个月是2016年1月。其中一个记录已于2016年1月16日到期,今天是2015年7月6日。剩下几天,直到整整六个月,所以此记录未被选中。如何选择1月份过期的所有记录?

注意:我正在使用MS Access。

2 个答案:

答案 0 :(得分:3)

相反,你想做这样的事情:

where prod_expired_date < date_add(curdate(), interval 6 month)

month()返回月份编号,1到12.这不符合您的要求。

如果您只想要将来会过期的东西,我应该补充一下:

where prod_expired_date >= curdate() and
      prod_expired_date < date_add(curdate(), interval 6 month)

编辑:

在MS Access中,以下内容应该有效:

where prod_expired_date < DATEADD("m", 6, now()) 

编辑II:

这有点棘手。您可以前一个月的最后一天添加7个月:

where prod_expired_date < DATEADD("m", 7, DATEADD("d", -DAY(now()), now()) 

答案 1 :(得分:1)

SELECT prod.Product_ID, prod.Product_Name, prod.Expired_Date FROM table WHERE prod.Expired_Date BETWEEN '2015-07-05 00:00:00' AND '2016-01-05 23:59:59'
这应该适用于你们:hh:m:ss格式的日期。

SELECT prod.Product_ID, prod.Product_Name, prod.Expired_Date FROM table WHERE prod.Expired_Date BETWEEN CURDATE() AND CURDATE() + INTERVAL 6 MONTH