首页 > 解决方案 > 根据日期之间的小时差更新表中的记录

问题描述

我正在尝试更新超过 24 小时(1 天)的表中的记录。我想通过使用以下查询在 Day 而不是几个小时内获取差异:

UPDATE Testing 
SET STS_CD='02'
WHERE EXTRACT(DAY FROM SYSTIMESTAMP)- EXTRACT(DAY FROM UPD_DTM)> 1

现在,可能存在我们必须检查 12 小时前或 36 小时前的记录的情况。所以,我现在只需要根据小时来计算差异。而且,在尝试根据小时数得出差异时,我没有得到正确的结果。你能建议吗?

UPDATE Testing 
SET STS_CD='02'
WHERE EXTRACT(HOURS FROM SYSTIMESTAMP)- EXTRACT(HOURS FROM UPD_DTM)> 24

标签: oracle

解决方案


日期算术适用于天数,除非您想要不同的东西。例如,如果您减去日期列和数字 2 ( upd_dtm - 2),您将得到“两天前”。

然后更新日期列在过去 1 天(或 24 小时)内的行

UPDATE Testing 
SET STS_CD = '02'
WHERE upd_dtm > sysdate - 1

或者,where upd_dtm > sysdate - 24/24(因为一天有 24 小时)。

也看看这个;将来可能会对您有所帮助:

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi';

Session altered.

SQL> select
  2    sysdate - 1 one_day_ago,
  3    sysdate - 12/24 twelve_hours_ago,
  4    sysdate - 36/24 thirty_six_hours_ago
  5  from dual;

ONE_DAY_AGO      TWELVE_HOURS_AGO THIRTY_SIX_HOURS
---------------- ---------------- ----------------
23.09.2018 09:38 23.09.2018 21:38 22.09.2018 21:38

SQL>

推荐阅读