MySQL timediff返回意外结果

时间:2017-01-25 19:02:32

标签: mysql database

请考虑以下问题:

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

返回

我希望我犯了一个明显的错误,有人可以指出,而不是开始下降到疯狂。

1 个答案:

答案 0 :(得分:1)

为了清楚起见,处理此问题的最简单且可能最高效的方法是(根据我在评论中提供的链接)

SELECT submitted_time FROM jobs WHERE submitted_time > DATE_ADD(NOW(), INTERVAL -1 DAY);

这应该是在查询发布时的最近24小时内按字面提交的所有工作。

这可能对您的查询不重要,但每当您将函数应用于表中的列时,您可能拥有的任何索引都无法使用,因为数据库必须在每个值上运行函数。表之前它可以进行比较。

使用此方法,您可以确定可比较的日期时间,并且mysql将使用submitted_time上的索引进行比较,假设该列已正确编入索引。