从连续几天的特定时间之间导入数据

import data between specific times from consecutive days

在 BIRT 报告中(自动执行查询 10 分钟 - 24x7),我想报告数据类型 "Timestamp" 的数据,我从 table 在 oracle 数据库中使用查询。假设我有一个名为 "table 1" 的 table。 Table 1 包含名称为 "column1" 且数据类型为时间戳的列。 column1 中的数据来自连续运行(24x7 - 365 天)的机器。

报告中的每一天,我想只显示24小时的数据,即05:30:00(今天)和05:30:00(下一天)之间的数据日)。

SELECT column1 from table 1
WHERE coulmn1 = SYSDATE - INTERVAL '24' hour;

提取最近24小时或几天或几个月的数据很容易,但是如何在where语句中定义一个逻辑,它以实际系统时间为参考并提供05:30(现在)和之间的数据05:30(第二天)。

例如: 在 01:00:00(或凌晨 1 点)自动执行查询应显示从前一天 (05:30:00) 到现在 (01:00:00)

的数据

在 08:00:00(或上午 8 点)自动执行的查询应该显示实际日期(05:30:00 到 08:00:00)的数据。

任何有关如何在 where 语句中定义逻辑的帮助将不胜感激。

使用 TRUNC(SYSDATE) 将其截断回午夜,然后添加 INTERVAL:

SELECT column1
FROM   table1
WHERE  column1 >= TRUNC( SYSDATE ) + INTERVAL '0 05:30' DAY TO MINUTE
AND    column1 <  TRUNC( SYSDATE ) + INTERVAL '1 05:30' DAY TO MINUTE;

如果你想处理 SYSDATE05:30 之前的情况,那么:

SELECT column1
FROM   table1
WHERE  column1 >= TRUNC( SYSDATE - INTERVAL '05:30' HOUR TO MINUTE )
                  + INTERVAL '0 05:30' DAY TO MINUTE
AND    column1 <  TRUNC( SYSDATE - INTERVAL '05:30' HOUR TO MINUTE )
                  + INTERVAL '1 05:30' DAY TO MINUTE;

如果您不想显示未来的时间,那么:

SELECT column1
FROM   table1
WHERE  column1 >= TRUNC( SYSDATE - INTERVAL '05:30' HOUR TO MINUTE )
                  + INTERVAL '0 05:30' DAY TO MINUTE
AND    column1 <= SYSTIMESTAMP;