在Oracle中获取前一小时记录

2admgd59  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(144)

我有一个用例,我需要得到以前的小时记录
例如:当前时间是下午1点30分,当作业运行时,我需要下午12点至下午1点之间的记录
我试过这样的东西

select CURRENT_TIMESTAMP , (CURRENT_TIMESTAMP  - interval '1' hour ) from table1;

但这将产生记录,从时间,它运行

CURRENT_TIMESTAMP               (CURRENT_TIMESTAMP-INTERVAL'1'HOUR)
2023-08-17 14:36:39.912 +0530   2023-08-17 13:36:39.912 +0530

要求是从

Starttime                       Endtime
2023-08-17 12:00:00.000 +0530   2023-08-17 13:00:00.000 +0530

即使在13- 14小时之间的任何时间运行查询

ercv8c1e

ercv8c1e1#

如果我理解正确的话,你必须把边界截断为小时。
设置日期/时间格式,只是为了知道什么是什么;你不必这么做

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

Session altered.

样本数据:

SQL> with test (id, datum) as
  2    (select 1, to_date('17.08.2023 09:25', 'dd.mm.yyyy hh24:mi') from dual union all
  3     select 2, to_date('17.08.2023 09:42', 'dd.mm.yyyy hh24:mi') from dual union all
  4     select 3, to_date('17.08.2023 10:05', 'dd.mm.yyyy hh24:mi') from dual union all
  5     select 4, to_date('17.08.2023 10:33', 'dd.mm.yyyy hh24:mi') from dual union all
  6     select 5, to_date('17.08.2023 11:20', 'dd.mm.yyyy hh24:mi') from dual
  7    )

查询方式:

8  select sysdate, id, datum
  9  from test
 10  where datum >= trunc(sysdate - interval '1' hour, 'hh24')
 11    and datum <  trunc(sysdate, 'hh24');

SYSDATE                  ID DATUM
---------------- ---------- ----------------
17.08.2023 11:26          3 17.08.2023 10:05
17.08.2023 11:26          4 17.08.2023 10:33

SQL>

相关问题