sql - Oracle:相对日期和日期分区表
问题描述
我在 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
条件在功能上等同于您的原始条件,它为数据库提供了一个合理的机会来评估应该使用哪个分区。
推荐阅读
- c# - 我如何使用 Rest Sharp API put 方法
- sql - 有条件的 NULL 替换
- c# - 如何在 C# 中以编程方式将 postgre SQL 服务器表中的日期时间列值设置为 null
- android - 在 Binding 中创建 setOnClickListener
- sql - ORACLE NLS_LANG
- java - If 不执行,除非使用 System.out.println 或在调试时
- css - How to sharpen more div border using CSS?
- python - 包中的 Python 疯狂模块导入
- php - CodeIgniter - 使用表单上传文件
- javascript - 我如何(在 D3 中)使一个矩形改变它的大小,同时保持在一个点上?