[英]Oracle: how to update “outdated” date in table?
我们的用例 :
对于表USERS
:
如果用户处于非活动状态(列'LAST_VISIT'
)超过60
分钟,请更新所有行(列ACTIVE
设置值'N'
)。
Google帮助我找到了如何获取db中的当前时间(我使用Oracle
):
SELECT sysdate FROM dual;
然后,我找到了一种方法来查找两个日期之间的分钟数差异:
SELECT(date1 - date2)*1440
看起来有点难看...但是还可以。
现在,我尝试将所有内容组合在一起:
UPDATE USERS u
SET ACTIVE='N'
WHERE SELECT((SELECT sysdate FROM dual) - u.LAST_VISIT)*1440 >60;
您能否检查一下我的最终查询。
可以吗 或者,也许可以对其进行优化?
您可以简化查询
UPDATE users u
SET active = 'N'
WHERE u.last_visit < sysdate - interval '1' hour;
如果last_visit
上有一个可用于查询的索引(因为谓词具有足够的选择性),则该查询可能会使用该索引。
贾斯汀的答案很好,但是可能会更新太多行。 您应该在where
子句中添加一个附加条件:
UPDATE users u
SET active = 'N'
WHERE active <> 'N' AND u.last_visit < sysdate - interval '1' hour;
这样可以为已经不活动的用户保存尝试进行的更新。 (注意:此版本假定active
不采用NULL
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.