簡體   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