在oracle中解析和替换

时间:2010-12-02 03:26:37

标签: sql database oracle

我是SQL / Oracle的新手,想知道是否有一种简单的方法来解析csv字符串并用另一个字符串替换令牌。

例如,我有一个像

这样的字符串

PARAM,值1,STR1,PARAM,值2,STR3,PARAM,值3

我希望用CONSTANT

替换param之后的值

所以,字符串将变为

PARAM,CONSTANT,STR1,PARAM,CONSTANT,STR3,PARAM,CONSTANT

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试REGEXP_REPLACE

select regexp_replace(regexp_replace(regexp_replace(
           str,'[^,]*','CONSTANT',1,3),'[^,]*','CONSTANT',1,9),'[^,]*','CONSTANT',1,15)
from
   (select 'param,value1,str1,param,value2,str3,param,value3' str from dual);

如果你有任何杂乱的东西(比如引用的值,包括逗号)那么它就会破坏。那说正则表达不是我的强项,有些人应该能够做得更好。

我认为你知道拥有像Oracle这样的RDBMS并以如此奇怪的方式存储数据是一个非常糟糕的主意。如果您不想使用对流表/列结构,则可以使用对象关系功能或XML。

答案 1 :(得分:0)

为此,我使用带有环视的正则表达式创建包 - 请参阅http://github.com/xtender/XT_REGEXP 例如:

with t as 
     (select 'param,value1,str1,param,value2,str3,param,value3' str from dual)
select xt_regexp.replace_all(str,'(?<=param,)[^,]*','CONSTANT') from t

(?&lt; = param,) - 它是预见正则表达式