从表中选择过去7天内创建的那些行的最佳方法是什么?
MySQL中有许多时间和日期函数,我对最简单的方法有点困惑。
为了这个问题,假设你有一个名为“my_table”的表,它包含一行“created_at”,这是一个DATETIME。
SELECT * FROM my_table WHERE ...
你会在WHERE子句中填写什么?
答案 0 :(得分:14)
WHERE DATEDIFF(NOW(), created_at) <= 7;
我喜欢它,因为它的内容是:“现在和创建之间的日期差异最多为7天(天)。”在我自己的脑海里
答案 1 :(得分:12)
...WHERE created_at >= Date_Add(now(), INTERVAL -7 DAY)
这是我的首选方式,因为它很清楚。但是ADDDATE
也很好(为了清晰起见,你也可以使用INTERVAL
形式;默认为天,所以你会看到人们将其关闭)。您不想要对created_at
进行计算并将其与now()
进行比较,因为这需要在每行created_at
上进行计算(假设MySQL没有'优化它),而修改now()
并与未修改的created_at
进行比较意味着MySQL会对该位进行一次比较并在与行进行比较时使用结果,而不是提及索引。
答案 2 :(得分:4)
...... WHERE created_at&gt; = DATE_SUB(CURRENT_DATE,INTERVAL 7 DAY)
希望这会有所帮助
答案 3 :(得分:2)
WHERE ADDDATE(datefield, 7) > NOW();
答案 4 :(得分:2)
SELECT * FROM my_table
WHERE DATE(created_at) >= SUBDATE(DATE(NOW()), 7)
答案 5 :(得分:1)
SELECT * FROM my_table WHERE my_table.datefield&gt; sysdate - 7