根据Oracle中的日期字段提取分区的实际日期信息

时间:2014-03-31 07:54:54

标签: sql oracle database-partitioning

我有一个使用区间分区(每月分区)的源表来保存3年的历史数据,并使用分区键作为表的日期字段。我们需要删除超过3年(36个月)的分区。

在删除分区时,我想向用户显示一条消息,告知要删除分区的月份和年份。要获取月份信息,我必须使用USER_TAB_PARTITIONS表的HIGH_VALUE列,因为partition_name是系统生成的,如SYSP ###'没有提供月份信息。

HIGH_VALUE列中的值如下:

TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')

我无法摘录' 2011-01-01'使用 SUBSTR / REGEXP_SUBSTR

从上面的字符串

我正在使用下面的查询来检查我是否可以提取所需的信息:

select REGEXP_SUBSTR('TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')',10, 10 )  FROM DUAL;

The error I am getting is:
Error: ORA-01036: illegal variable name/number

我不确定我是否在这里犯了一些愚蠢的错误。

会不会得到您的帮助/任何指针/替代方式来实现这一目标。

提前致谢。

此致

维诺德

1 个答案:

答案 0 :(得分:3)

你在做什么对我没有多大意义。

您尝试在date上应用正则表达式,而不是varchar

你可以试试这个:

select to_char( TO_DATE( ' 2011-01-01 00:00:00'
                       , 'SYYYY-MM-DD HH24:MI:SS'
                       , 'NLS_CALENDAR=GREGORIAN'
                       )
              , 'yyyy-mm-dd'
              )
FROM   DUAL

如果要从语句中提取值,请尝试以下方法:

select substr( 'TO_DATE('' 2011-01-01 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')',10, 11 )
FROM   DUAL

注意我已将语句中的最后一个10更改为11