我有一个使用区间分区(每月分区)的源表来保存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
我不确定我是否在这里犯了一些愚蠢的错误。
会不会得到您的帮助/任何指针/替代方式来实现这一目标。
提前致谢。
此致
维诺德
答案 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
。