日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle走当前时间分区,Oracle分区使用波斯日历的时间间隔

發布時間:2023/12/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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分区使用波斯日历的时间间隔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。