【问题标题】:Oracle: Partition table by monthOracle:按月分区表
【发布时间】:2013-01-07 19:46:45
【问题描述】:

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

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 函数,这不起作用。

【问题讨论】:

    标签: sql oracle date partitioning


    【解决方案1】:

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

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

    我建议在这两种情况下都使用月份数字而不是名称。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 如果要按月分区,需要NUMTOYMINTERVAL,NUMTODSINTERVAL不起作用。
      猜你喜欢
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2020-04-15
      相关资源
      最近更新 更多