7 天前的 MYSQL 日期时间行?

use*_*340 4 mysql

尝试了各种各样的事情,但此刻空手而归。我让它像这样硬编码:

WHERE (activities.created_at BETWEEN '2015-08-07 00:00:00'
                              AND '2015-08-07 23:59:59.999')
Run Code Online (Sandbox Code Playgroud)

我只是想使它自动化一点,这样我就不必每天都去那里并将日期更改为 7 天前的任何日期。

我最近的测试是:

WHERE (`activities`.`created_at` = CURDATE() - INTERVAL 7 DAY)
Run Code Online (Sandbox Code Playgroud)

它不会抛出错误,而是在应该显示 338 行时显示一个空集。

the*_*orn 6

这应该工作

where date(created_at) = CURDATE() - interval 7 day
Run Code Online (Sandbox Code Playgroud)

你的问题是等号两边的数据类型不一样。created_at是一个日期时间列,而curdate()返回一个日期。上面的语句created_at在比较之前转换为日期。

  • 请注意,在函数中包装一列可防止 MySQL 使用索引范围扫描操作。此查询模式强制 MySQL 为表中的*每一*行(或未被其他谓词排除的每一行)计算表达式“date(created_at)”,并将其与文字进行比较。在大型表上,这会对性能产生显着影响,而在“裸”列上使用谓词的查询计划可以有效利用索引。 (2认同)