删除所有时间戳早于x天的行。

60

我想从我的数据库中的特定表中删除时间戳早于180天的所有行。

我尝试了这个:

DELETE FROM on_search WHERE search_date < DATE_SUB(NOW(), INTERVAL 180 DAY);

但是这删除了所有行,而不仅仅是早于6个月的行。

我在on_search表中有一个名为search_date的列,其中包含创建该行的时间。

search_id   search_term    search_date 
660779      car games      1390052553 

你能展示一些数据的例子吗? - juergen d
搜索ID 搜索词 搜索日期 660779 车游戏 1390052553 - Khaleal
2个回答

91
DELETE FROM on_search 
WHERE search_date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 180 DAY))

列search_date的类型是int? - Devesh
1
做到了!谢谢!很抱歉问了这么多问题,但是有没有办法重新分配search_id,从1开始使用新的id?(删除部分数据后,表中的id不是从1开始的) - Khaleal
你可以更改自增起始编号。但要小心,否则可能会严重破坏表的键值。https://dev59.com/E3NA5IYBdhLWcg3wa9Kp - O. Jones
有没有办法在数据库中的所有表上运行此命令? - Farveaz
@Farveaz 这不是一个命令,而是一次查询。我建议你在 Stackoverflow 上为此创建一个问题。 - Dayron Gallardo

68
DELETE FROM on_search WHERE search_date < NOW() - INTERVAL N DAY

将 N 替换为您的天数计数


2
尽管今天创建了邮票,但是那个操作删除了所有行。 - Khaleal
@Khaleal 你可以用任何你想要的日期替换 NOW()。 - Ali MasudianPour
7
这在处理日期时间列时效果良好,但与所需的时间戳列不兼容。 - Dayron Gallardo

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