如何计算MYSQL中的时差

时间:2012-12-04 11:46:01

标签: mysql

我有使用MYSQL作为数据库的Rails应用程序。对于某些情况,我必须删除表中当前时间前2小时存储的所有记录。

我的查询是:

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

这里create_at是datetime列类型。以“2012-12-04 06:39:44”格式存储值

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

任何人都可以更正我的查询。我想要MySQL解决方案。请帮帮我

4 个答案:

答案 0 :(得分:4)

如果你想删除2小时前创建的记录,你可能需要这个:

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

或者这将删除超过2小时前创建的所有记录:

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

答案 1 :(得分:2)

试试这个::

DELETE FROM TABLE_NAME WHERE TIMEDIFF(NOW(),created_at) < '02:00:00';

答案 2 :(得分:1)

尝试:

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

此查询将删除超过2小时前创建的所有内容。两个小时前(第二个)的确是一个等号。当然,您可以将日期格式设置为仅考虑分钟,但这会降低查询速度。 如果created_at被索引(我认为它应该是),不要对它执行任何函数,因此它可以使用索引来更快地执行删除。

答案 3 :(得分:0)

我知道你要删除在一段时间内创建的所有记录。因此,您不应将“大于”运算符应用于减法运算。相反,你应该尝试指定一个适当的时间框架。

您还可以查看timediff函数http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

抱歉,我无法为您发布正确的声明,因为我手头没有mysql服务器。

相关问题