Oracle:按月分区表

时间:2013-01-07 19:46:46

标签: sql oracle date partitioning

我的解决方案(德语月份):

PARTITION BY LIST ((to_char(GEBURTSDATUM, 'Month'))) 
(  
  PARTITION p1 VALUES('JANUAR'),  
  PARTITION p2 VALUES('Februar'), 
  PARTITION p3 VALUES('MÄRZ'),  
  PARTITION p4 VALUES('APRIL'), 
  PARTITION p5 VALUES('MAI'),  
  PARTITION p6 VALUES('JUNI'), 
  PARTITION p7 VALUES('JULI'), 
  PARTITION p8 VALUES('AUGUST'),
  PARTITION p9 VALUES('SEPTEMBER'),
  PARTITION p10 VALUES('OKTOBER'), 
  PARTITION p11 VALUES('NOVEMBER'),
  PARTITION p12 VALUES('DEZEMBER') 
);  

由于to_char功能,这不起作用。

2 个答案:

答案 0 :(得分:3)

在11g中,您可以通过定义虚拟列来使用基于功能的分区:http://www.oracle-base.com/articles/11g/partitioning-enhancements-11gr1.php#virtual_column_based_partitioning

否则,您必须为分区月手动定义和维护单独的列。

我建议在任何一种情况下使用月号而不是名字。

答案 1 :(得分:0)

如果表有日期列,则下面的语句可用作从今天开始的每月分区的示例(Oracle 11g):

PARTITION BY RANGE (date_column)
            INTERVAL (NUMTODSINTERVAL(1,'month') )
             (PARTITION p_first VALUES LESS THAN ('16-MAY-2016'));