如何从第24小时获取oracle数据库中的准确记录

时间:2019-02-27 13:23:29

标签: oracle

首先,对这个多余的问题表示抱歉。有很多结果可用于我的问题,但对我而言不起作用。有人可以在以下情况下提供帮助吗?

出于参考目的,我包括了timestamp(col_timestamp)列和timestamp(crnt_time_before_24hr)和current_timestamp(crnt_time)之前的24小时

SELECT
    TO_CHAR(delete_requested_dt,'YYYY-mm-dd hh24:mi:ss') as col_timestamp,
    TO_CHAR(systimestamp - interval '24' hour,'YYYY-mm-dd hh24:mi:ss') as crnt_time_before_24hr,
    TO_CHAR(systimestamp,'YYYY-mm-dd hh24:mi:ss') as crnt_time

FROM
    test_user_table
WHERE
        status_id IN (
            801,802
        )
    AND
        trunc(delete_requested_dt) <=  sysdate - interval '1' day
ORDER BY delete_requested_dt desc;

以上查询与我的目标完全相反。此查询将检查从当前日期起24小时之外的值。我使用此查询来检查是否存在任何值,该值应该存在于当前日期的24小时之内!

下面是结果

COL_TIMESTAMP       CRNT_TIME_BEFORE_24 CRNT_TIME          
------------------- ------------------- -------------------
2019-02-26 23:55:57 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:55:46 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:55:38 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:55:25 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:55:14 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:55:01 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:54:51 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:54:40 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:54:29 2019-02-26 13:06:30 2019-02-27 13:06:30
2019-02-26 23:23:40 2019-02-26 13:06:30 2019-02-27 13:06:30

从输出中可以看到,从当前日期起24小时内的值是2019-02-26 13:06:30。

LHS(COL_TIMESTAMP)上表中的日期值显示数据为2019-02-26 23:23:40。!!!!

怎么可能?只有小于2019-02-26 13:06:30的值才正确!我想念什么吗?请帮助我。

FYI:delete_requested_dt列为时间戳数据类型

1 个答案:

答案 0 :(得分:1)

尝试一下:

SELECT
    TO_CHAR(delete_requested_dt,'YYYY-mm-dd hh24:mi:ss') as col_timestamp,
    TO_CHAR(systimestamp - interval '24' hour,'YYYY-mm-dd hh24:mi:ss') as crnt_time_before_24hr,
    TO_CHAR(systimestamp,'YYYY-mm-dd hh24:mi:ss') as crnt_time

FROM
    test_user_table
WHERE
        status_id IN (
            801,802
        )
    AND
        cast(delete_requested_dt as date) <=  sysdate - interval '1' day
ORDER BY delete_requested_dt desc;