我有一个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天));
时间戳包含毫秒,必须在比较之前删除这些毫秒,因为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 |