我正在寻找关于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;
无济于事,所以,我在这里问你是否可以帮助我,谢谢。
答案 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值。