2010-12-02 15 views
0

SQL/Oracleが新しく、csv文字列を解析してトークンを別の文字列に置き換える簡単な方法があるかどうか疑問です。oracleで構文解析して置き換えます。

例えば、私は

のparam、VALUE1、STR1、PARAM、値2、STR3、PARAM、VALUE3

のような文字列を持っていると私はCONSTANT

でのparam後の値を交換したいです

ので、文字列が

のparam、CONSTANT、STR1、PARAM、CONSTANT、STR3、PARAM、事前にCONSTANT

感謝になります。

+1

ですあなたはこれにSQLとOracleを使いたいですか?簡単な検索と置換で十分です。あるいは、質問がはっきりしない。 – vpit3833

答えて

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 

(?< = PARAM、) - それはなぜ先読み正規表現

関連する問題