Mysql删除和时间戳

时间:2018-06-08 20:42:11

标签: mysql date timestamp delete-row

我正在寻找关于MySQL的一些帮助,非常简单的问题,但真的打破了我的大脑一段时间。

我有一个名为“logs”的表,它有“date”的东西,那就是Timestamp的INT(11),所以,它使用了timestamp actual。

我会制作一个每分钟执行一次SQL命令的脚本,检查所有行,如果“日期”有多于/等于6小时,我累了这么多,没有任何帮助。

我使用过的一些命令无效。

DELETE FROM logs WHERE date < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR));
DELETE FROM logs WHERE date < NOW() - INTERVAL 6 HOUR;

无济于事,所以,我在这里问你是否可以帮助我,谢谢。

3 个答案:

答案 0 :(得分:0)

您的日期列必须是Type TIMESTAMP而不是INT,以便能够正确地比较时间戳,或者您可以写:

DELETE FROM logs WHERE FROM_UNIXTIME(date) < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR));

答案 1 :(得分:0)

你可以这样做:

DELETE FROM logs
WHERE FROM_UNIXTIME(date) < UNIX_TIMESTAMP(NOW() - INTERVAL 6 HOUR);

答案 2 :(得分:0)

日期&#34;事情&#34;被称为列。该列具有特定的数据类型。该问题表明该列是数据类型INT(11)。并且在该列中存储自1970-01-01 UTC以来的unix样式的32位整数秒。

如果这一切都是真的,那么第一个查询表格是合适的。右侧的表达式(小于比较)返回整数秒。

作为演示,请考虑以下表达式:

SELECT UNIX_TIMESTAMP( NOW() + INTERVAL -6 HOUR )   ==> 1528450555

或者,写原文的方式

SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 HOUR))  

返回等效结果。

可以评估第二个查询,但是从DATETIME到数字的自动转换将返回一个整数值,如20180608153555(即yyyymmddhhmmss),而不是自纪元开始以来的秒数。

考虑一个演示,在数字上下文中评估DATETIME dataytpe:

SELECT NOW() + INTERVAL -6 HOUR + 0  ==>  20180608153600

如果我们使用该表达式,将其与INT(11)列进行比较,并删除所有INT(11)列小于该值的行,它将删除表中的每一行该列中包含非NULL值。