2009-08-21 3 views
3

J'ai une colonne dans ma base de données Oracle qui, pour des raisons indépendantes de ma volonté, contient une chaîne CSV, par ex.Remplacement de la chaîne Oracle

Point a, point b, c point, point d

Je veux exécuter une instruction UPDATE pour se débarrasser de l'élément c. Ainsi se retrouver avec

Point a, point b, point d

Comment puis-je obtenir ce

Répondre

9

Vous pouvez utiliser la fonction Oracle REPLACE:

UPDATE table 
SET col = replace(col, 'item c', '') 

Vous avez juste besoin d'être prudent le manipuler dans le cadre d'un fichier CSV, p.ex. en supprimant une virgule suivante. Cela pourrait signifier remplacer d'abord «item c», puis remplacer «item c» pour capturer les deux cas.


EDIT: ah, j'ai peut-être mal compris. Ma solution est basée sur la suppression d'une chaîne particulière de votre fichier CSV - si vous cherchez à toujours remplacer le 3e article, la réponse de Vincent est celle dont vous aurez besoin

2

vous pouvez utiliser une combinaison de INSTR et SUBSTR pour supprimer le troisième terrain:

SQL> WITH a AS (SELECT 'Item a,Item b,Item c,Item d' col FROM dual) 
    2 SELECT substr(col, 1, instr(col, ',', 1, 2)) 
    3   || substr(col, instr(col, ',', 1, 3) + 1) sub 
    4  FROM a; 

SUB 
-------------------- 
Item a,Item b,Item d 
4

Si vous avez une version assez récente d'Oracle (je crois que les expressions régulières ont été introduites dans Oracle 10), vous pouvez utiliser REGEXP_REPLACE:

UPDATE table SET column = REGEXP_REPLACE(column,'[^\,]+,','',1,3) 

(aussi, s'il vous plaît faire des choses violentes le génie qui a stocké CSV de cette façon dans une base de données relationnelle.)

+0

Méfiez-vous simplement si la substance CSV a cité des chaînes contenant des virgules '"Smith, John", 123,2009-12-31' –

+0

support d'expression régulière devient rapidement ma fonctionnalité préférée! ! – caddis

Questions connexes