错误代码:1292。截断错误的时间值

时间:2017-05-24 10:04:50

标签: mysql sql

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

如何选择工作而不是删除?

2 个答案:

答案 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,请定义单位(SECONDMINUTEHOUR...)、起始日期和结束日期(必须是时间戳的数据类型)。< /p>

ROUND( TIMESTAMPDIFF(HOUR, initial_date, CURRENT_TIMESTAMP()) / 24, 2 )
相关问题