首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >timediff大于5分钟的更新列

timediff大于5分钟的更新列
EN

Stack Overflow用户
提问于 2017-03-16 10:35:36
回答 2查看 4.5K关注 0票数 3

我有一个表(会话),其中有两个列,我必须在这个查询中使用它们。Session_Active (是一个tinyInt)和Last_active(是一个日期时间)。

我想要创建一个查询,为所有表计算“Last_active”和“Session_Active”之间的时间差,如果时间大于5分钟,则应该更改“Session_Active”。

这是我工作的部分:

代码语言:javascript
复制
SELECT timediff(now(), `Last_Active`) from sessions WHERE `Session_Active` = true;

我一点也不知道如何检查差异是否大于5分钟,也不知道如何放置UPDATE Session_Active = false (如果差值大于5分钟)。

提前谢谢!(:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 10:43:31

您可以使用DATE_SUB使用以下解决方案

代码语言:javascript
复制
UPDATE sessions SET `Session_Active` = 0
WHERE `Last_Active` <= DATE_SUB(NOW(), INTERVAL 5 MINUTE)
    AND `Session_Active` = 1

您想使用时间戳解决方案吗?

您可以使用TIMESTAMPDIFF

代码语言:javascript
复制
UPDATE sessions SET `Session_Active` = 0
WHERE TIMESTAMPDIFF(MINUTE, `Last_Active`, NOW()) >= 5
    AND `Session_Active` = 1

注意:,您应该小心使用TIMESTAMP!一些不应该使用TIMESTAMPhttps://stackoverflow.com/a/35469149/3840840的信息。在这个答案中,有一个对这篇文章的引用,描述了DATETIMETIMESTAMPINT的性能。 TIMESTAMP解决方案直到2038年才开始工作。这将由2038年问题引起。 很好地解释了这个问题和2038年发生的事情:https://stackoverflow.com/a/2012620/3840840

票数 5
EN

Stack Overflow用户

发布于 2017-03-16 10:43:01

您可以使用UNIX

当使用date参数调用UNIX_TIMESTAMP()时,它以秒的形式返回参数的值,自'1970-01-01 00:00:00‘UTC开始。日期参数可以是日期、日期时间或时间戳字符串,也可以是YYMMDD、YYMMDDHHMMSS、YYYYMMDD或YYYYMMDDHHMMSS格式的数字。服务器将日期解释为当前时区中的值,并将其转换为UTC中的内部值。--这比大表集上的DATE_SUB快.

代码语言:javascript
复制
UPDATE sessions 
 SET `Session_Active` = 0
  WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(`Last_Active`) > 300
  AND `Session_Active` = 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42831585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档