SELECT *
FROM SESSIONS
WHERE TIME_TO_SEC(TIMEDIFF(NOW(), SESSION_CREATED)) / 3600 >= 24
这给了我2个结果
DELETE FROM SESSIONS
WHERE TIME_TO_SEC(TIMEDIFF(NOW(), SESSION_CREATED)) / 3600 >= 24
这给了我:“错误代码:1292。截断错误的时间值”
SESSION_CREATED是TIMESTAMP数据类型
实际数据:
SESSION_ID SESSION_CREATED
223133 2017-05-22 07:14:34
223134 2017-05-22 07:14:36
如何选择工作而不是删除?
答案 0 :(得分:5)
你为什么要使用如此复杂的表达方式?为什么不这样做:
DELETE FROM SESSIONS
WHERE SESSION_CREATED < NOW() - INTERVAL 1 DAY;
至于您的代码可能失败的原因,它使用timediff()
,它仅限于时间数据类型的范围。 And this is:
MySQL以'HH:MM:SS'格式检索并显示TIME值(或 'HHH:MM:SS'格式表示大小时值)。 TIME值的范围可以从 '-838:59:59'到'838:59:59'。
因为您使用的是NOW()
,所以值会从一次迭代变为下一次迭代。您恰好在数据不太旧时运行SELECT
,然后在DELETE
时运行它。
答案 1 :(得分:0)
在 MySQL 上使用 TIMESTAMPDIFF
的 Timediff 示例:
要使用 TIMESTAMPDIFF
,请定义单位(SECOND
、MINUTE
、HOUR
...)、起始日期和结束日期(必须是时间戳的数据类型)。< /p>
ROUND( TIMESTAMPDIFF(HOUR, initial_date, CURRENT_TIMESTAMP()) / 24, 2 )