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