Oracle分区间隔按日 - 错误的高值?

时间:2013-10-31 11:44:01

标签: oracle oracle11g partitioning

我创建了一个包含以下分区间隔的表:

create table 
pos_data_two ( 
    start_date        TIMESTAMP,
    store_id          NUMBER,
    inventory_id      NUMBER(6),
    qty_sold          NUMBER(3)
 ) 
 PARTITION BY RANGE (start_date) 
 INTERVAL(NUMTODSINTERVAL (1, 'DAY')) 
 (  
  PARTITION pos_data_p2 VALUES LESS THAN (TO_DATE('30.10.2013', 'DD.MM.YYYY'))
 ); 

当我插入一个带有时间戳值

的行时
'31.10.2013 00:00:00'

新创建的分区的高值是:

TIMESTAMP' 2013-11-01 00:00:00'

这是对的吗?不应该是2013-10-31 00:00:00 ??

1 个答案:

答案 0 :(得分:3)

(免责声明:我只是在这里猜测)

您按天划分,因此给定日期的值属于同一分区。

您要插入的行的start_date正好在午夜,因此Oracle必须决定是将其放在前一天还是第二天。

显然,Oracle正在使用规则

lower_bound <= value < upper_bound

决定一个值应该进入哪个区间,所以你的值

2013-10-31 00:00:00

进入区间

[2013-10-31 00:00:00; 2013-11-01 00:00:00 [