SQL按日期过滤器获取记录

时间:2018-10-30 09:33:05

标签: mysql sql

我需要按日期过滤器获取日期:过去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);

如果按日期过滤器选择数据的正确方法,请给我评论?

2 个答案:

答案 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())时,您的查询结果无法缓存

此类查询的结果无法缓存和重用,这对于大数据集至关重要。只要您意识到这一点,如果有可能/希望在您的情况下缓存查询结果,您就可以解决潜在的不利影响,并通过适当的方法来绕过此问题。