2010-12-02 11 views
0

Je suis nouveau à SQL/Oracle, et je me demande s'il existe un moyen facile d'analyser une chaîne csv et de remplacer les jetons par une autre chaîne.analyse et remplace dans Oracle

par exemple, j'ai une chaîne comme

param, valeur1, str1, param, valeur2, str3, param, value3

et je veux remplacer la valeur après la param avec un CONSTANT

donc, la chaîne deviendrait

param, CONSTANT, str1, param, CONSTANT, str3, param, CONSTANT

merci à l'avance.

+1

Pourquoi vous voulez utiliser SQL et Oracle pour cela? Une simple recherche et remplacement devrait suffire. Ou, la question n'est pas claire. – vpit3833

Répondre

1

Vous pouvez 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); 

Si vous avez quelque chose en désordre (comme les valeurs cotées, y compris des virgules), puis il se brisera. Cela dit, les expressions régulières ne sont pas mon point fort et certaines devraient pouvoir faire un meilleur travail.

Je suppose que vous savez que d'avoir un SGBDR comme Oracle et de stocker les données d'une manière si étrange est une très mauvaise idée. Si vous n'utilisez pas une structure de table/colonne conventionnelle, vous pouvez utiliser les fonctions de relation d'objet ou XML.

0

Pour que je crée paquet avec des expressions régulières avec le regard autour de - voir sur http://github.com/xtender/XT_REGEXP Exemple:

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,) - il est préanalyse expression régulière