2010-12-14 21 views
0

J'ai une colonne de chaîne (Col1) dans la table (Tab1). Je veux écrire un script qui supprime les caractères '%' ou '&' des valeurs de chaîne.Colonne de mise à jour SQL deux fois

La sélection pour c'est le suivant:

SELECT REPLACE(Tab1.Col1, '&', ''), 
     REPLACE(Tab1.Col1, '%', '') 
FROM Table1 Tab1 
WHERE Tab1.Col1 like '%[&]%' 
     OR Tab1.Col1 like '%[%]%' 

Cela vous semble correct? Si c'est comment je convertirais ceci à n'importe quelle instruction de mise à jour? J'ai essayé les éléments suivants:

UPDATE Tab1 
SET Tab1.Col1 = REPLACE(Tab1.Col1, '&', ''), 
    Tab1.Col1 = REPLACE (Tab1.Col1, '%', '') 
FROM Table1 Tab1 
WHERE Tab1.Col1 like '%[&]%' 
     OR Tab1.Col1 like '%[%]%' 

Cela ne fonctionne pas comme vous ne pouvez pas mettre à jour la colonne deux fois dans SET. Existe-t-il un autre moyen de le faire? Je sais que je suis probablement en train de faire quelque chose de stupide, donc je m'excuse pour mon ignorance.

Merci d'avance.

Répondre

5

Cela devrait fonctionner. Replace renvoie une chaîne que vous pouvez à nouveau passer à une autre fonction de remplacement.

UPDATE Tab1 
    SET Tab1.Col1 = REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', '') 
    FROM Table1 Tab1 
    WHERE Tab1.Col1 like '%[&]%' OR Tab1.Col1 like '%[%]%' 
1
UPDATE Tab1 
SET Tab1.Col1 = REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', '') 
FROM Table1 Tab1 
WHERE Tab1.Col1 like '%[&]%' 
    OR Tab1.Col1 like '%[%]%' 
0

Comme vous ne dites pas ce que vous utilisez SGBDR, j'évite des choses qui sont évidemment non-portable:

UPDATE Tab1 
SET Tab1.Col1 = REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', '') 
WHERE Tab1.Col1 <> REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', ''); 
+0

«J'évite des choses qui sont de toute évidence non -portable "- erm, SQL standard utilise' <> 'plutôt que'! = '. – onedaywhen

+0

@onedaywhen 'SQL Standard' <> 'Portable' mais vous êtes [right] (http://stackoverflow.com/questions/723195/should-i-use-or-for-not-equal-in-tsql/723426 # 723426) :) –