我需要按日期过滤器获取日期:过去10天,过去30天,过去12个月。 我编码了:
最近10天:
SELECT * FROM INVOICES WHERE invoices.date>= DATE_ADD(CURDATE(),INTERVAL -10 DAY);
最近30天:
SELECT * FROM INVOICES WHERE invoices.date>= DATE_ADD(CURDATE(),INTERVAL -30 DAY);
最近12个月:
SELECT * FROM INVOICES WHERE invoices.date>= DATE_ADD(CURDATE(),INTERVAL -12 MONTH);
如果按日期过滤器选择数据的正确方法,请给我评论?
答案 0 :(得分:0)
您的代码可以正常工作,并且完全有效。我只能根据自己的喜好进行一些风格上的推荐。
我建议您像这样使用它,通过减去curdate()日期的时间间隔,对于读者来说似乎更合乎逻辑,您可以减去当前日期的几天以获取日期过去。
我没有考虑,而是将负数的天/月(实际上会减去它)减去到当前日期,以获得过去的日期。
SELECT * FROM invoices WHERE invoices.date >= curdate() - INTERVAL 10 DAY
SELECT * FROM invoices WHERE invoices.date >= curdate() - INTERVAL 30 DAY
SELECT * FROM invoices WHERE invoices.date >= curdate() - INTERVAL 12 MONTH
答案 1 :(得分:0)
您编写的代码非常好,可能适合您的情况。
但是,关于日期及其功能,我建议您注意的一件事是-当您发布日期函数(例如now()
或curdate()
)时,您的查询结果无法缓存。
此类查询的结果无法缓存和重用,这对于大数据集至关重要。只要您意识到这一点,如果有可能/希望在您的情况下缓存查询结果,您就可以解决潜在的不利影响,并通过适当的方法来绕过此问题。