You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库中获取过去24小时准确记录的查询问题求助

问题分析与修复方案

嘿,我明白你为啥困惑了——你写的查询条件和你实际想要的时间范围完全不匹配,问题出在trunc()函数的使用上!

为啥原查询结果不符合预期?

你用了trunc(delete_requested_dt) <= sysdate - interval '1' day,这个操作直接把delete_requested_dt的时分秒截断了,只保留日期部分。比如2019-02-26 23:55:57被截断后变成2019-02-26 00:00:00,而查询执行当天是2019-02-27,sysdate - interval '1' day就是2019-02-26,所以所有日期为2019-02-26的记录都满足<=的条件,不管它们的时间是凌晨还是深夜——这就是那些23点多的记录被筛出来的原因,完全和“过去24小时”无关。

正确的查询写法

要精准筛选当前时间往前24小时到现在的记录,直接用原始的timestamp字段和带时间的当前时间做范围比较,不要用trunc()截断时间:

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 delete_requested_dt >= systimestamp - INTERVAL '24' HOUR 
    AND delete_requested_dt <= systimestamp 
ORDER BY delete_requested_dt DESC;

额外提示

如果你的需求有细微调整(比如只包含昨天某个时间点之后的记录),可以修改区间的起止,但核心原则不变:用systimestamp(带时分秒的当前时间戳)和delete_requested_dt直接比较,避免截断时间导致的范围偏差。

内容的提问来源于stack exchange,提问作者Anish Gopinath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:08:27