select 每月数据 sql

select data by month sql

我有一个 table 包括:

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

我需要 select 将在未来六个月到期的产品。我已经创建了一个语句,它没有给我错误消息,但我猜它不起作用,因为它 returns 没有结果。

声明:

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

我哪里错了?

附加问题:

我希望将从本月起第 6 个月过期的记录也 selected。例如,从现在开始的六个月是2016年1月。其中一条记录是2016年1月16日expired_date,今天是2015年7月6日。还有几天就变成整整六个月了,所以这条记录未 selected。 select 一月将过期的所有记录,我该怎么办?

注意:我正在使用 MS Access。

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

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

month() returns 月份数,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()) 

编辑二:

这有点棘手。可以到上个月的最后一天加上7个月:

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

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