提问者:小点点

基于unix epoch时间戳的MySQL删除记录


我有一个MySQL表,如下所示:

+----------+---------------------+-----------------+---------------+
| id       | firstName           | lastName        | tstamp        |
+----------+---------------------+-----------------+---------------+
| 133      | James               | Mosher          | 1593612000000 |  
| 145      | Bill                | Turner          | 1593698400000 | 
| 146      | Jeremy              | Vine            | 1593784800000 |  
| 152      | Ramon               | Jesus           | 1593180000000 |
+----------+---------------------+-----------------+---------------+

并且我希望能够根据tstamp值(即epoch unix时间)删除早于x天的记录。 我使用下面的查询应该只删除最后一行(Ramon Jesus),因为它已超过5天。。。 但是,它会删除所有记录。 知道我做错了什么吗?

从学生中删除,其中tstamp>; UNIX_TIMESTAMP(DATE_SUB(NOW(),间隔5天));


共1个答案

匿名用户

时间戳包含毫秒,必须在比较之前删除这些毫秒,因为unix_timestamp()返回的datetime值不包含毫秒。
此外,比较必须使用相反的不等式运算符:

DELETE FROM students 
WHERE tstamp / 1000 < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 5 DAY));

请参阅演示。
结果:

| id  | firstName | lastName | tstamp        |
| --- | --------- | -------- | ------------- |
| 133 | James     | Mosher   | 1593612000000 |
| 145 | Bill      | Turner   | 1593698400000 |
| 146 | Jeremy    | Vine     | 1593784800000 |