这里我想从数据库列复制一些子字符串并将其附加到列的末尾。
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
但无法解决此问题。
答案 0 :(得分: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
在11g之前,您可以使用regexp_substr
和substr
的组合:
select txt,
substr(regexp_substr(txt, '-id [^ ]*'), 4) sub
from (select 'string data -id john -xyz test some data' txt from dual)
答案 1 :(得分:0)
试试这个:
select p,
p || regexp_replace(p, '(.*-id )(.*)( -xyz.*)', ' -c test.\2.pl') np
from t
(t
是您的表格,p
是列名称)
Here是一个小提琴