在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)的数据。
任何帮助如何在欣赏语句的地方定义逻辑的方法。
答案 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;
如果您想处理SYSDATE
在05: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;