2010-12-02 130 views
0

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

例如,我有一个像

PARAM,值1,STR1,PARAM,值2,STR3帕拉姆一个字符串值3

,我想以恒定

帕拉姆后替换值

因此,该字符串将成为

PARAM,常量,STR1,PARAM,常量,STR3,PARAM,不断

在此先感谢。

+1

为什么你想为此使用SQL和Oracle?简单的查找和替换就足够了。或者,这个问题还不清楚。 – vpit3833 2010-12-02 03:40:39

回答

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。

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 

(?< =参数) - 这是向前看的正则表达式