删除MySQL中时间戳早于当前时间戳的行的查询

9

我需要一个查询语句,能够删除数据库表中时间戳早于当前日期或当前时间戳的所有行。

希望您能尽快提供帮助!

这是我正在使用的查询语句,但它并不能正常工作:

delete from events where timestamp<CURRENT_TIMESTAMP{);

从表名中删除时间戳小于(现在-20分钟间隔)的记录。 - user3562771
5个回答

31

嗯...这可能看起来有点傻,但是表中的每个记录都比现在(Now())旧,因为Now()是在查询处理时计算的。如果您想删除一个比另一个记录旧的记录,那么您不应该使用Now(),而是要使用您要与其余记录进行比较的记录的时间戳。或者,如果您要删除早于特定时间点的记录,则需要计算要用来比较的时间戳。例如,要删除早于10分钟的记录,您可以使用以下代码:

DELETE FROM events WHERE timestamp < (NOW() - INTERVAL 10 MINUTE)

或者,删除超过一天的记录:

DELETE FROM events WHERE timestamp < (NOW() - INTERVAL 1 DAY)

针对具体的时间点(例如:2012年10月12日下午4:15:00 GMT),有一种方法可以实现,但是我目前想不起来语法了。我的MySQL手册在哪里?:)


2
如果您使用了一个数字 PHP 时间戳,您需要这个额外的函数 UNIX_TIMESTAMP(NOW() - INTERVAL 1 YEAR); - PJ Brunet

10
delete from events where timestamp < NOW()

应该足够了。


谢谢您的快速回复,但那并没有起作用!它正在删除所有记录,即使时间戳不早于当前时间/日期。 - Arihant
你的意思是“older”指的是时间戳大于当前时间?那么你需要将语句转换为timestamp > NOW()。 - Łukasz Rysiak

2
DELETE FROM events WHERE timestamp < UNIX_TIMESTAMP(NOW())

或者如果它是一个标准的日期时间。
DELETE FROM events WHERE timestamp < NOW()

谢谢您的快速回复,但那并没有起作用!它正在删除所有记录,即使时间戳不早于当前时间/日期。 - Arihant
将删除操作转换为选择时间戳。您能展示一下不应该出现在结果集中的几个时间戳值吗?同时执行一个SELECT NOW()。 - Kris Robison

1

Hibernate(hql)删除7天前的记录

我不确定,但您可以尝试这样做:

    String hqlQuery = "from PasswordHistory pwh "
          + "where pwh.created_date < datediff(curdate(), INTERVAL 7 DAY)";

            List<Long> userList = (List<Long>)find(hqlQuery);
    deleteAll(userList );// from baseDao

public void deleteAll(Collection list) {
        getHibernateTemplate().deleteAll(list);
    }

-4
DELETE FROM table WHERE date < '2011-09-21 08:21:22';

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