vps交流

MJJ帮忙写一句mysql删除语句。


表table_a里面的时间字段 ‘time’ 是时间戳类型的

下面这条sql语句是根据时间戳查询从当前时间获取过去7天的数据:

被loc防火墙拦截了,语句发不出来就用…代替

  1. select … table_a where `time` > (unix_timestamp()-3600*24*7);

复制代码

我现在要做的是:从当前时间开始,保留最近7天的数据,删除7天前所有数据的数据。

比如,现在的时间是2022.3.7,我要保留table_a,2022.3.1-2022.3.7(当前时间或者当天都行)的数据,其余的全部删除。

这条Delete语句怎么写?MJJ帮忙写一句mysql删除语句。

  1. Del… `table_a` where `time` ….

复制代码

后面的where语句怎么写?

本帖最后由 image 于 2022-3-7 15:22 编辑

WHERE date < UNIX_TIMESTAMP(DATE(NOW() – INTERVAL 7 DAY))

OR

WHERE date < UNIX_TIMESTAMP(DATE(NOW() – INTERVAL 1 WEEK))

delete from `table_a` where `time` ….
Delete From `table_a` where `time`…..
我只會rm -rf /*
time < 当天时间戳
你要是精确到哪一天,时间戳要自己转,不能取当前的减去7天。
Del… `table_a` where `time` < 1646064000;

1646064000为2022-03-01 00:00:00

你是真心的吗 大于小于不就行了 转换一下时间戳

iiss 发表于 2022-3-7 15:15
你是真心的吗 大于小于不就行了 转换一下时间戳

大佬取笑了MJJ帮忙写一句mysql删除语句。
脑子短路了,大于改小于就行了,where `time` < (unix_timestamp()-3600*24*7);

  1. DELETE FROM `table_a` WHERE `time` <= unix_timestamp(date_format(now(), ‘%Y-%m-%d’)) – 604800;

复制代码

说明:

date_format(now(), ‘%Y-%m-%d’) 得到当前日期0点(例如 2022-03-07 00:00:00)
unix_timestamp(‘2022-03-07’) 把当前日期0点的时间转换成unix时间戳,例如 1646582400
减掉604800是取7天前(减掉了 7 * 24 * 60 * 60)0点的时间戳

所以是删除从今日0点0分0秒算起604800秒之前的数据。