【问题标题】:import data between specific times from consecutive days从连续几天的特定时间之间导入数据
【发布时间】:2020-02-01 18:09:08
【问题描述】:

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

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

【问题讨论】:

    标签: sql oracle date datetime birt


    【解决方案1】:

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

    【讨论】:

    • 谢谢@MTO。总会有两种情况 - 一种是 sysdate > 05:30 和 sysdate
    • @Chanti 第二个和第三个查询应该自动处理这两种情况之间的差异。您可以尝试使用不同的静态时间戳值代替SYSDATE
    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2023-02-26
    相关资源
    最近更新 更多