2012-04-17 182 views
5

我正在查找能够删除时间戳早于当前日期/时间或当前时间戳的数据库中表的所有行的查询。MySQL查询删除时间戳早于当前时间戳的行

真的会很感激这里的一些帮助!

下面是我使用的查询,但因为我认为这是不工作:

delete from events where timestamp<CURRENT_TIMESTAMP{); 

回答

8
delete from events where timestamp < NOW() 

应该够了。

+0

感谢您的快速答复,但不工作!它删除所有的记录,即使时间戳不比当前时间早 – Arihant 2012-04-17 19:22:03

+0

“老”,你的意思是时间戳大于当前时间?那么你必须把声明变成时间戳NOW() – 2012-04-17 19:30:57

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

,或者如果它是一个标准的datetime

DELETE FROM events WHERE timestamp < NOW() 
+0

感谢您的快速回复,但这是行不通的!即使时间戳不早于当前时间/日期,它也会删除所有记录 – Arihant 2012-04-17 19:23:09

+0

将删除转为选择时间戳。你可以显示一些不应该在结果集中的时间戳值吗?也做一个SELECT NOW()。 – 2012-04-17 19:27:44

21

嗯...这似乎很傻,但在表中的所有记录会比现在()年纪大了,因为现在()在计算查询处理的时间。如果你想删除比其他记录早的记录,那么你不想使用Now(),而是使用记录中的时间戳来比较其他记录。或者,如果您想要删除比特定时间点早的记录,则需要计算您想要用于比较的时间戳。例如,要删除记录早于10分钟后,你可以这样做:

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

或者,删除是在一天的旧记录:

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

对于特定时间点(如十月2012年12月12日,格林威治标准时间下午4点15分),有一种方法可以做到这一点,但是语法现在就逃脱了我。我的MySQL手册在哪里? :)

+2

如果您使用数字PHP时间戳,则需要此额外函数'UNIX_TIMESTAMP(NOW() - INTERVAL 1 YEAR);' – 2015-06-11 19:40:57

-3
DELETE FROM table WHERE date < '2011-09-21 08:21:22'; 
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); 
    }