【发布时间】:2014-03-31 07:54:53
【问题描述】:
我有一个提要表,它使用间隔分区(每月分区)来保存 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')
我无法使用 SUBSTR/REGEXP_SUBSTR 从上述字符串中提取“2011-01-01”。
我使用下面的查询只是为了检查我是否可以提取所需的信息:
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
我不确定我是否在这里犯了一些愚蠢的错误。
非常感谢您的帮助/任何指针/替代方法来实现这一目标。
提前致谢。
问候,
维诺德
【问题讨论】:
-
能发完整的sql语句吗?
-
是的,当然。从 DUAL 中选择 REGEXP_SUBSTR('TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')',10, 10 );我得到的错误是:
-
请更新您的问题,而不是添加评论。
-
为什么是
regexp_substr而不仅仅是substr? (虽然有那个空间,但它需要从位置 11 开始,而不是 10?) -
@Patrick Hofman 我已经更新了问题。
标签: sql oracle database-partitioning