2

我创建了一个具有以下分区间隔的表:

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 吗?

4

1 回答 1

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 [

于 2013-10-31T12:16:31.393 回答