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
怎么可以选择但不能删除呢?
为什么要用这么复杂的表达方式?为什么不直接做:
DELETE FROM SESSIONS
WHERE SESSION_CREATED < NOW() - INTERVAL 1 DAY;
至于为什么你的代码可能会失败,它正在使用timediff()
这仅限于时间数据类型的范围。这是: https://dev.mysql.com/doc/refman/5.7/en/time.html
MySQL 以“HH:MM:SS”格式检索并显示 TIME 值(或
对于较大的小时值,采用“HHH:MM:SS”格式)。 TIME 值的范围可能是
“-838:59:59”到“838:59:59”。
因为你正在使用NOW()
,值从一次迭代到下一次迭代都会发生变化。你刚刚碰巧运行了SELECT
当数据不太旧时DELETE
当它是的时候。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)