如何在MYSQL中计算时间差

6

我有一个使用MYSQL作为数据库的Rails应用程序。由于某些条件,我必须删除表中存储在当前时间之前恰好2小时的所有记录。

我的查询语句是:

DELETE FROM TABLE_NAME WHERE (NOW() - created_at) > 7200;

这里create_at是一个日期时间列类型,以“2012-12-04 06:39:44”格式存储值。

我的问题是,上述查询即使记录创建时间只有40到50分钟并被删除,也会获取记录。唯一的问题是记录在从创建时间达到40到50分钟后被删除。

请问有人能纠正我的查询吗?我需要MySQL解决方案。请帮帮我。


您在同一表达式中混合了不同的数据类型。 - symcbean
4个回答

5

如果您想删除创建于两个小时前的记录,则可能需要这个:

DELETE FROM TABLE_NAME WHERE created_at = NOW() - INTERVAL 2 HOUR

或者这个,那将删除所有超过2小时前创建的记录:
DELETE FROM TABLE_NAME WHERE created_at < NOW() - INTERVAL 2 HOUR

谢谢Fthiella,让我试一下然后告诉你。 - palani

2
尝试这个:
DELETE FROM TABLE_NAME WHERE TIMEDIFF(NOW(),created_at) < '02:00:00';

会尝试一下并让你们知道。 - palani

1

尝试:

DELETE FROM TABLE_NAME WHERE created_at<DATE_SUB(NOW(),INTERVAL 2 HOUR)

这个查询将删除所有创建时间早于2小时之前的内容。如果使用等号,则表示恰好2小时前(以秒为单位)。当然,您可以格式化日期以仅考虑分钟,但这会减慢查询速度。 如果created_at已经建立索引(我认为应该建立),则不要对其执行任何函数,以便可以使用索引更快地执行删除操作。


在我的情况下,我将间隔应用于NOW()。这样可以保持created_at列不变,因此可以使用索引更快地执行删除操作。 - Zagor23

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接