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 解决方案。请帮我

4

4 回答 4

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
于 2012-12-04T11:49:44.860 回答
2

尝试这个 ::

DELETE FROM TABLE_NAME WHERE TIMEDIFF(NOW(),created_at) < '02:00:00';
于 2012-12-04T11:50:52.763 回答
1

尝试:

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

此查询将删除超过 2 小时前创建的所有内容。放一个等号意味着正好 2 小时前(以秒为单位)。当然,您可以格式化日期以仅考虑分钟,但这会减慢查询速度。如果 created_at 被索引(我认为应该是),不要对其执行任何功能,以便它可以使用索引更快地执行删除。

于 2012-12-04T11:52:53.123 回答
0

我了解您想删除在一段时间内创建的所有记录。因此,您不应将“大于”运算符应用于减法运算。相反,您应该尝试指定适当的时间范围。

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

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

于 2012-12-04T11:55:22.463 回答