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

Oracle SQL如何精准获取昨日全量无遗漏记录?

最优Oracle SQL获取昨日全量记录方案

先给结论:你给出的第一种写法就是最优方案,完全能确保获取昨日所有记录且无遗漏:

and fch_date >= TRUNC(SYSDATE - 1)
and fch_date < TRUNC(SYSDATE)

为什么这个写法最优?

  • 兼容性拉满:不管fch_date是DATE类型(精确到秒)还是TIMESTAMP类型(支持小数秒),这个条件都能覆盖所有昨日的时间范围——从昨日00:00:00.000到今日00:00:00.000之前的所有记录,不会漏掉任何带小数秒的TIMESTAMP数据。
  • 性能友好:TRUNC(SYSDATE -1)和TRUNC(SYSDATE)都是常量计算,不会触发全表扫描(只要fch_date上建有普通索引)。

说说第二种写法的问题

and fch_date BETWEEN TRUNC(SYSDATE - 1)
and trunc(sysdate) - interval '1' SECOND

这个写法存在遗漏风险:如果fch_date是TIMESTAMP类型,它会漏掉昨日23:59:59.001到23:59:59.999之间的记录,因为trunc(sysdate) - interval '1' SECOND的结果是昨日23:59:59(精确到秒),而TIMESTAMP的小数秒部分不会被包含在BETWEEN范围内。

额外补充

如果你的业务场景中fch_date确实是DATE类型(无小数秒),两种写法结果一致,但第一种写法更简洁通用,没必要用第二种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:04:53