2012-12-04 64 views
6

时间差,我有使用MYSQL数据库的Rails应用程序。对于某些条件,我必须删除表格中的所有记录,这些记录恰好在当前时间前2小时存储。如何计算MYSQL

我的查询是:

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

这里create_at是datetime列类型。在格式存储值“2012年12月4日6时39分44秒”

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

任何一个可以请纠正我的查询。我想要MySQL解决方案。请帮我

+0

您在同一表达混合不同的数据类型。 – symcbean

回答

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 
+0

谢谢Fthiella,让我试试让你知道 – palani

1

试试这个::

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

将给予尝试,并让你知道家伙 – palani

+0

好吧,请让我知道,如果你卡在它 –

0

尝试:

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

该查询将删除创建2个多小时前的一切。放一个等号意味着2小时前(秒)。当然,您可以格式化日期以仅考虑分钟,但这会降低查询速度。 如果created_at被索引(我认为它应该是),请不要对它执行任何功能,以便它可以使用索引更快地执行删除操作。

+0

为什么不TIMEDIFF? –

+0

在我的情况下,我有间隔应用于NOW()。这使得created_at列保持不变,所以它可以使用索引更快地执行删除操作。 – Zagor23