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

时间:2019-10-03 12:11:45

标签: sql oracle date datetime birt

在BIRT报表(自动执行10分钟查询-24x7 )中,我要报告数据类型为“时间戳”的数据,该数据类型是使用查询从oracle数据库中的表导入的。假设我有一个名称为“表1”的表。表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)的数据。

任何帮助如何在欣赏语句的地方定义逻辑的方法。

1 个答案:

答案 0 :(得分:3)

使用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;