请考虑以下问题:
SELECT submitted_time FROM jobs WHERE timediff(NOW(), submitted_time) < '24:00:00'
我希望这可以返回所有包含时间戳在过去24小时内的“submitted_time”列的行,但是我收到以下结果:
2017-01-18 14:58:34
2017-01-16 14:58:34
如果我运行查询SELECT NOW()
,我会2017-01-25 18:58:32
这似乎是正确的。
更奇怪的是,我在数据库中有更多最近的行,例如:
2017-01-24 15:17:13
返回不。
我希望我犯了一个明显的错误,有人可以指出,而不是开始下降到疯狂。
答案 0 :(得分:1)
为了清楚起见,处理此问题的最简单且可能最高效的方法是(根据我在评论中提供的链接)
SELECT submitted_time FROM jobs WHERE submitted_time > DATE_ADD(NOW(), INTERVAL -1 DAY);
这应该是在查询发布时的最近24小时内按字面提交的所有工作。
这可能对您的查询不重要,但每当您将函数应用于表中的列时,您可能拥有的任何索引都无法使用,因为数据库必须在每个值上运行函数。表之前它可以进行比较。
使用此方法,您可以确定可比较的日期时间,并且mysql将使用submitted_time上的索引进行比较,假设该列已正确编入索引。