我是SQL / Oracle的新手,想知道是否有一种简单的方法来解析csv字符串并用另一个字符串替换令牌。
例如,我有一个像
这样的字符串PARAM,值1,STR1,PARAM,值2,STR3,PARAM,值3
我希望用CONSTANT
替换param之后的值所以,字符串将变为
PARAM,CONSTANT,STR1,PARAM,CONSTANT,STR3,PARAM,CONSTANT
提前谢谢。答案 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,) - 它是预见正则表达式