Oracle:相对日期和分区日期 table

Oracle: Relative dates and date partitioned table

我在 Oracle 中每月按 DATETIME 列分区 table。 table 包含 > 60 亿行。现在我想使用 sysdate 过滤此 table。因此,我可以使用相对日期编写查询,例如,昨天、上个工作日、去年等...

所以,我要找的是类似于下面有效的代码:

SELECT *
FROM BIG_PART_TABLE PARTITION FOR (DATE **TODAY**)
WHERE TRUNC(DATETIMECOLUMN) = TRUNC(SYSDATE)

但显然,那是行不通的。

你有什么想法可以让我实现它吗?

谢谢!

使用范围比较:

SELECT *
  FROM BIG_PART_TABLE
  WHERE DATETIMECOLUMN BETWEEN TRUNC(SYSDATE)
                           AND TRUNC(SYSDATE+1)

这种模式在搜索索引日期值时很有用。

您无法可靠地判断 Oracle 需要查看哪个分区,因为 sysdate 是一个易变函数(即它的值不随时间变化)。与其编写复杂的动态代码,不如相信数据库首先会选择正确的分区。

我会将您的查询表述如下:

select *
from big_part_table partition 
where datetimecolumn >= trunc(sysdate) and datetimecolumn < trunc(sysdate) + 1

where 条件在功能上等同于您的原始条件,它为数据库提供了合理的机会来评估应使用哪个分区。