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
条件在功能上等同于您的原始条件,它为数据库提供了合理的机会来评估应使用哪个分区。
我在 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
条件在功能上等同于您的原始条件,它为数据库提供了合理的机会来评估应使用哪个分区。