oracle走当前时间分区,Oracle分区使用波斯日历的时间间隔
与数据库级NLS_CALENDAR相比,没有其他方法可以在不同的日历中定义间隔。通过使用虚拟列划分每个日期落入的(波斯)月份的数字表示,可以得到相同的效果:
create table test_temp_times (
id number(18) not null,
xdate date not null,
str varchar2(20),
ydate as (to_number(to_char(xdate, 'YYYYMM', 'nls_calendar=persian')))
)
partition by range(ydate)
interval(1)
(partition p0 values less than (139201))
enable row movement;
如果其中填充了示例开始日期后一年的每一天的记录:
insert into test_temp_times (id, xdate, str)
select level, date '2013-03-20' + level, null
from dual
connect by level < 366;
创建的分区如下所示:
select table_name, partition_name, high_value
from user_tab_partitions where table_name = 'TEST_TEMP_TIMES';
TABLE_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ----------
TEST_TEMP_TIMES P0 139201
TEST_TEMP_TIMES SYS_P479 139202
TEST_TEMP_TIMES SYS_P480 139203
TEST_TEMP_TIMES SYS_P481 139204
TEST_TEMP_TIMES SYS_P482 139205
TEST_TEMP_TIMES SYS_P483 139206
TEST_TEMP_TIMES SYS_P484 139207
TEST_TEMP_TIMES SYS_P485 139208
TEST_TEMP_TIMES SYS_P486 139209
TEST_TEMP_TIMES SYS_P487 139210
TEST_TEMP_TIMES SYS_P488 139211
TEST_TEMP_TIMES SYS_P489 139212
TEST_TEMP_TIMES SYS_P490 139213
13 rows selected
您还可以检查月份界限所属的分区:
select utp.partition_name, min(ttt.xdate), max(ttt.xdate)
from test_temp_times ttt
join user_objects uo on uo.object_id = dbms_rowid.rowid_object(ttt.rowid)
join user_tab_partitions utp on utp.table_name = uo.object_name
and utp.partition_name = uo.subobject_name
group by utp.partition_name
order by partition_name;
PARTITION_NAME MIN(TTT.XDATE) MAX(TTT.XDATE)
------------------------------ -------------- --------------
P0 2013-03-20 2013-03-20
SYS_P479 2013-03-21 2013-04-20
SYS_P480 2013-04-21 2013-05-21
SYS_P481 2013-05-22 2013-06-21
SYS_P482 2013-06-22 2013-07-22
SYS_P483 2013-07-23 2013-08-22
SYS_P484 2013-08-23 2013-09-22
SYS_P485 2013-09-23 2013-10-22
SYS_P486 2013-10-23 2013-11-21
SYS_P487 2013-11-22 2013-12-21
SYS_P488 2013-12-22 2014-01-20
SYS_P489 2014-01-21 2014-02-19
SYS_P490 2014-02-20 2014-03-19
至少,我认为这就是您要实现的目标。不幸的是,由于SQL Fiddle没有分区选项,因此无法添加演示,但这已针对11.2.0.3。进行了测试。
当然,您必须使其使用分区进行查询...如果我只是这样做的话:
select * from test_temp_times
where xdate = date '2013-11-01';
它找到包含计划的行:
-----------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 47 | 164 (0)| 00:00:02 | | |
| 1 | PARTITION RANGE ALL| | 1 | 47 | 164 (0)| 00:00:02 | 1 |1048575|
|* 2 | TABLE ACCESS FULL | TEST_TEMP_TIMES | 1 | 47 | 164 (0)| 00:00:02 | 1 |1048575|
-------------------------------------------------------------------------------------------------------
如果我将虚拟列明确添加到查询中:
select * from test_temp_times
where xdate = date '2013-11-01'
and ydate = to_number(to_char(date '2013-11-01', 'YYYYMM', 'nls_calendar=persian'));
然后,它知道要查询哪个分区:
----------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 47 | 14 (0)| 00:00:01 | | |
| 1 | PARTITION RANGE SINGLE| | 1 | 47 | 14 (0)| 00:00:01 | 9 | 9 |
|* 2 | TABLE ACCESS FULL | TEST_TEMP_TIMES | 1 | 47 | 14 (0)| 00:00:01 | 9 | 9 |
----------------------------------------------------------------------------------------------------------
Clearly I haven't created any indexes yet. If you are looking for a whole month's worth of data, you would only need to query on a single ydate value, and ignore xdate; but presumably you'd need a mix at least some of the time.
oracle走当前时间分区,Oracle分区使用波斯日历的时间间隔相关推荐
- oracle如何查询时间格式,oracle时间格式讨论
1. oracle对时间格式的数据存贮 Oracle以特定的存储格式来存储时间,占7个字节,与查询显示的时间无关.存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位.因此在一些前台支持毫 ...
- oracle怎么以时间排序,oracle指定数据排序在前面怎么处理
最近工作碰到客户的特殊要求,需要将特定的数据排序在前面,然后才按时间顺序排序,这个之前还真没有碰到过,好在有万能的度娘,搜索了一下,发现可以实现,使用order by decode语句即可. 对于or ...
- oracle rman备份时间点,Oracle Rman 控制RMAN的备份时间,减少IO消耗
一.问题描述 由于服务器配置不高,备份策略为周末全备.周一至周六差异备份. 平时服务器CPU使用30%左右. 全备份时,开启两个通道,CPU达到70%-80%左右,业务不卡顿.不掉单,session不 ...
- oracle sql比较时间大小,Oracle数据库中日期时间的操作比较和加减
Oracle数据库中日期时间的操作比较和加减 Oracle关于时间/日期的操作 1.日期时间间隔操作 当前时间减去7分钟的时间 select sysdate,sysdate - interval '7 ...
- oracle最大空闲时间,使用Oracle PROFILE控制会话空闲时间
Oracle推荐PROFILE和SQLNET.EXPIRE_TIME一起使用,但由于PL/SQL工具本身的特点,它会在SESSION的状态变成SNIPED(PROFILE IDLE_TI 客户想实现对 ...
- oracle查询sql时间ain,Oracle SQL 时间查询
一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会和我一样,直觉的采用ldquo;yyyy-MM-dd HH:mm:ssrdquo;的 to_date()与24小时制表 ...
- 查看oracle会话空闲时间,使用Oracle PROFILE控制会话空闲时间
客户想实现对会话空闲时间的控制,下面是做的一个例子. Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权 ...
- oracle数据库定时任务时间设置,oracle定时任务(dbms_job)的时间设置参考
最后那一项可以参考如下: 每天午夜12点 'TRUNC(SYSDATE + 1)' 每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 每星期二中午1 ...
- oracle发邮件时间不对,oracle 发邮件错误
oracle 发邮件错误 下面存储过程执行后有错误, create or replace procedure test_mail(msg_subject in varchar2, mes_contex ...
最新文章
- 【动画2】CALayer动画
- 结对代码 复审 意见
- ansible之fetch模块
- 简单的UIButton按钮动画效果iOS源码
- 【Linux 内核】Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )
- C#中File的使用
- Android开发之设置DialogFragment的窗体背景色的方法亲测可用
- 工程勘察设计收费标准2002修订版_全过程工程咨询收费模式超全解析
- Android入门逆引手册 - 12 评分条(RatingBar)的使用
- 字典推导式_Python基础-推导式
- anaconda虚拟环境设置
- 【SQL】查询数据库中某个字段有重复值出现的信息
- 谷歌推出一款72个量子比特的通用量子计算机
- MetalSeed 's 网站收藏夹
- 数据库索引及基础优化入门
- 【业务安全-04】万能用户名及万能密码实验
- 北京周边有意境的好去处!!!
- mysql微信昵称存储_mysql保存微信昵称特殊字符的方法
- 形式化方法 Assignment 2: Proof engineering
- mysql归档模式_数据库归档模式设置步骤
热门文章
- 冷知识:摄影艺术与图像处理算法之间的纠葛关系你知道吗
- this指针 java_彻底理解Java中this指针
- 上海交大计算机学院奖学金,上海交通大学-电子信息与电气工程学院-学生工作办公室...
- linux uboot启动流程分析,uboot启动流程分析
- vues响应接口and实例
- 我是如何解决gitlab 命令行上传需要输密码
- http 路径 |_HTTP 请求與响应的格式及 curl 命令使用
- python默认数据转换_Python_数据类型转换
- js原生带缩略图的图片切换效果
- 推荐25款很棒的 HTML5 前端框架和开发工具【下篇】