2012-07-23 57 views
0

这里我想从数据库列中复制一些子字符串并将其附加在列的末尾。Oracle中的正则表达式用法

E.g.

数据列的样子:

string data -id pattern -xyz test some data 

这应该被替换这样

string data -id pattern -xyz test some data -c test.pattern.pl 

你可以看到,我想-id-xyz之前复制的字符串,并在年底追加它测试和pl

如果某列是

string data -id john -xyz test some data 

则更换的值应该是

string data -id john -xyz test some data -c test.john.pl 

我尝试使用REGEXP_REPLACE/REGEXP_SUBSTR但不能够解决这个问题。

+2

那么,你使用正则表达式不工作? – APC 2012-07-23 10:44:19

回答

0

在11g中,你可以使用regexp_substr直接拿到模式:

select txt, regexp_substr(txt, '-id ([^ ]*)', 1, 1, '', '1') 
    from (select 'string data -id john -xyz test some data' txt from dual) 

TXT          REG 
string data -id john -xyz test some data john 

11克之前,你可以使用的regexp_substrsubstr组合:

select txt, 
     substr(regexp_substr(txt, '-id [^ ]*'), 4) sub 
    from (select 'string data -id john -xyz test some data' txt from dual) 
0

试试这个:

select p, 
     p || regexp_replace(p, '(.*-id)(.*)(-xyz.*)', ' -c test.\2.pl') np 
    from t 

t是你的餐桌a第二p是列名)

Here是小提琴