0

是否可以使用 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. 从字符串的开头删除@DATA:
  2. 删除字符串末尾的 @
  3. 替换用空格
4

2 回答 2

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);
于 2016-10-17T12:10:00.137 回答
0

像这样的东西:

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

测试:

select str, replace(regexp_replace(str, '^@DATA:|@$'), ':', ' ') 
from ( select '@DATA:xx.yy:zz@' as str from dual);
于 2016-10-17T11:50:42.007 回答