从过去7天中选择行的最佳方法是什么?

Ric*_*nop 4 mysql sql datetime

从表中选择过去7天内创建的那些行的最佳方法是什么?

MySQL中有许多时间和日期函数,我对最简单的方法有点困惑.

为了这个问题,假设你有一个名为"my_table"的表,它包含一行"created_at",这是一个DATETIME.

SELECT * FROM my_table WHERE ...
Run Code Online (Sandbox Code Playgroud)

你会在WHERE子句中填写什么?

Dre*_*rew 14

WHERE DATEDIFF(NOW(), created_at) <= 7;
Run Code Online (Sandbox Code Playgroud)

我喜欢它,因为它写着:"现在和创建之间的日期差异最多为7天(天)." 在我自己的脑海里

  • 我还没有查过这个函数,但要小心,不要简单地说“从现在开始超过 7 天”,因为如果是下午 1 点,许多此类函数只返回最后一个 `7 * 24 的结果小时`,从而遗漏了第一天下午 1 点之前的所有记录。这就是为什么我的答案在任何时间戳引用周围使用“DATE()” (2认同)

T.J*_*der 12

...WHERE created_at >= Date_Add(now(), INTERVAL -7 DAY)
Run Code Online (Sandbox Code Playgroud)

这是我的首选方式,因为它很清楚.但ADDDATE也很好(INTERVAL为了清晰起见,你可以使用表格;它的默认值是天,所以你看到人们把它关掉).你希望做一个计算created_at和比较,now()因为这需要计算在created_at每行(假设MySQL不优化出来),而修改now()和比较未修改created_at意味着MySQL不会把该位一次,并使用比较行时的结果,更不用说索引了.

  • 哇,简直不敢相信没有人注意到'Date_Add`中缺少下划线.我......*加了*......它.;-) (2认同)