![](/img/trans.png)
[英]Oracle SQL pull data for a selected date from a table that is daily partitioned
[英]Oracle: Relative dates and date partitioned table
我在 Oracle 中有一個按DATETIME
列的每月分區表。 該表包含 > 60 億行。 現在我想使用sysdate
過濾這個表。 因此,我可以使用相對日期來編寫查詢,例如昨天、上個工作日、去年等......
所以,我尋找的是類似於下面的代碼:
SELECT *
FROM BIG_PART_TABLE PARTITION FOR (DATE **TODAY**)
WHERE TRUNC(DATETIMECOLUMN) = TRUNC(SYSDATE)
但顯然,這行不通。
你有什么想法讓我可以讓它工作嗎?
謝謝!
您無法可靠地判斷 Oracle 需要查看哪個分區,因為sysdate
是一個易失性函數(即它的值隨時間不是恆定的)。 與其為此編寫復雜的動態代碼,您應該首先相信數據庫會選擇正確的分區。
我將您的查詢表述如下:
select *
from big_part_table partition
where datetimecolumn >= trunc(sysdate) and datetimecolumn < trunc(sysdate) + 1
where
條件在功能上等同於您的原始條件,它為數據庫提供了一個合理的機會來評估應該使用哪個分區。
使用范圍比較:
SELECT *
FROM BIG_PART_TABLE
WHERE DATETIMECOLUMN BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE+1)
這是一種在搜索索引日期值時很有用的模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.