2010-12-02 81 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 

(?< =參數) - 這是向前看的正則表達式