Oracle REGEXP_REPLACE - 用子字符串替换多次出现的模式

时间:2016-10-17 11:41:17

标签: oracle oracle11g regexp-replace regexp-substr

是否可以使用Oracle中的 REGEXP_REPLACE 函数用子字符串替换多次出现的模式。我试过多个排列&正则表达式的组合,但不知怎的,它没有正常工作。表面上它看起来可行,但不是很确定..任何想法或指针尝试。样本输入/输出

INPUT_STRING =  SELECT @DATA:T.ID:ID@, @DATA:T.NAME:NAME@, @DATA:T.ADDRESS:ADDRESS@, @DATA:T.CREATED_DATE:CREATED_DATE@ FROM TABLE_NAME T
OUTPUT_STRING = SELECT T.ID ID, T.NAME NAME, T.ADDRESS ADDRESS FROM TABLE_NAME T

从本质上讲,我们需要在固定模式中实现以下目标

@DATA:xx.yy:zz@, where xx is table, yy is column name, zz column alias   
  1. 从字符串
  2. 的开头删除 @DATA:
  3. 删除字符串
  4. 末尾的 @
  5. 替换为空格

2 个答案:

答案 0 :(得分:1)

我想你想要像

这样的东西
select regexp_replace(txt,'@DATA:(\w+\.(\w+)):(\2)@', '\1 \2' ) from ( 
   select 'SELECT @DATA:T.ID:ID@, @DATA:T.NAME:NAME@, @DATA:T.ADDRESS:ADDRESS@, @DATA:T.CREATED_DATE:CREATED_DATE@ FROM TABLE_NAME T' as txt 
   from dual);

答案 1 :(得分:0)

这样的事情:

 replace(regexp_replace(str, '^@DATA:|@$'), ':', ' ') 

测试:

select str, replace(regexp_replace(str, '^@DATA:|@$'), ':', ' ') 
from ( select '@DATA:xx.yy:zz@' as str from dual);