我有一张包含以下内容的表:
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。
答案 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