我需要得到日期按日期过滤器:过去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);请给我意见,如果这是正确的方式选择数据的日期过滤器?
发布于 2018-10-30 17:48:22
您的代码运行良好,并且是完全有效的。我只是根据我自己的喜好有一些风格上的建议。
我建议您这样使用它,通过从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 发布于 2018-10-30 20:18:13
您编写的代码非常好,在您的情况下应该会做得很好。但是,关于日期及其函数,我要建议您做的一件事是,当您发出例如now() curdate() 或 date 之类的日期函数时,您的查询结果不能被缓存。
这种查询的结果不能被缓存和重用,这在大型数据集的情况下是至关重要的。只要您意识到这一点,您就能够注意到潜在的不利影响,并在有可能/希望在您的情况下缓存查询结果的情况下,修补一种适当的方法来绕过此问题。
https://stackoverflow.com/questions/53061190
复制相似问题