我有一个给定日期:
2013-12-20
这是产品的发行日期,产品自发行之日起6个月内到期。过期日期没有存储,所以我想从给定的发行日期检查它是否在下个月到期()。
所以我的猜测是在发行日期上加上6个月,如果到期,现在检查+ 1个月的间隔?
这是我尝试的:
SELECT * FROM `products` WHERE DATE_ADD(`issue_date`,INTERVAL 6 MONTH)
< DATE(NOW() + INTERVAL 1 MONTH) ORDER BY `issue_date` ASC
我做错了什么?
SELECT * FROM products
WHERE Now() <= DATE_ADD(issue_date, INTERVAL 7 MONTH)
&& Now() >= DATE_ADD(issue_date, INTERVAL 6 MONTH)
ORDER BY issue_date ASC;
- 必须归还的第一件物品的截止日期是今天(所以发行日期+ 6个月=今天);
- 比到期日期明天(所以发布日期+ 6个月+ 1天=今天);
- …
- 比到期日期早一个月(所以发行日期+ 6个月+ 1个月=发行日期+ 7个月=今天)
这里有一个建议可能会有帮助
$ =日期("y-m-d",strtotime(+ 6个月));
这将导致日期比当前日期晚6个月:
类似地,
自即日起一个月
$ =日期("y-m-d",strtotime(+ 1个月));
您的查询要求选择将在一个月内过期或已经过期的所有产品。您可以使用between
子句
SELECT * FROM `products` WHERE DATE_ADD(`issue_date`,INTERVAL 6 MONTH) between NOW() and DATE(NOW() + INTERVAL 1 MONTH) ORDER BY `issue_date` ASC
Mysql中如果您想检查产品是否在6个月内过期,如果在下个月过期,则最好在查询中将此1个月添加到第6个月:
SELECT * FROM products WHERE issue_date <= DATE_ADD(issue_date,INTERVAL 7 MONTH)
ORDER BY issue_date ASC;
在回答了这些问题之后,我最终得出了这样的结论:
SELECT * FROM `products`
WHERE DATE_ADD( `issue_date` , INTERVAL 6 MONTH )
< DATE(NOW() + INTERVAL 1 MONTH)
SELECT * FROM `products`
WHERE NOW() >= DATE_ADD(`issue_date`,INTERVAL 5 MONTH)
AND NOW() <= DATE_ADD(`issue_date`,INTERVAL 6 MONTH)
ORDER BY `issue_date` ASC
try this
SELECT * FROM `products` where DATE_ADD(`issue_date`,INTERVAL 6 MONTH) < CURDATE()