首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL get records by date过滤器

SQL get records by date过滤器
EN

Stack Overflow用户
提问于 2018-10-30 17:33:05
回答 2查看 49关注 0票数 1

我需要得到日期按日期过滤器:过去10天,过去30天,过去12个月。我对它进行了编码:

在过去10天内:

代码语言:javascript
复制
SELECT  * FROM INVOICES  WHERE invoices.date>= DATE_ADD(CURDATE(),INTERVAL -10 DAY);

最近30天:

代码语言:javascript
复制
SELECT  * FROM INVOICES  WHERE invoices.date>= DATE_ADD(CURDATE(),INTERVAL -30 DAY);

最近12个月:

代码语言:javascript
复制
SELECT  * FROM INVOICES  WHERE invoices.date>= DATE_ADD(CURDATE(),INTERVAL -12 MONTH);

请给我意见,如果这是正确的方式选择数据的日期过滤器?

EN

回答 2

Stack Overflow用户

发布于 2018-10-30 17:48:22

您的代码运行良好,并且是完全有效的。我只是根据我自己的喜好有一些风格上的建议。

我建议您这样使用它,通过从curdate()日期减去时间间隔,它使读者看起来更符合逻辑,您可以从当前日期减去一组日期,以获得过去的日期。

而不是思考,我添加一个负数的天数/月,这实际上会减去它,当前日期,以获得过去的日期。

代码语言:javascript
复制
 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 
票数 0
EN

Stack Overflow用户

发布于 2018-10-30 20:18:13

您编写的代码非常好,在您的情况下应该会做得很好。但是,关于日期及其函数,我要建议您做的一件事是,当您发出例如now() curdate() date 之类的日期函数时,您的查询结果不能被缓存

这种查询的结果不能被缓存和重用,这在大型数据集的情况下是至关重要的。只要您意识到这一点,您就能够注意到潜在的不利影响,并在有可能/希望在您的情况下缓存查询结果的情况下,修补一种适当的方法来绕过此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53061190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档