我有使用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解决方案。请帮帮我
答案 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服务器。