繁体   English   中英

Oracle:如何更新表中的“过时”日期?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM