Comment remplacer une chaîne dans une colonne de table SQL Server

364

J'ai une table ( SQL Sever) qui fait référence aux chemins ( UNCou autre), mais maintenant le chemin va changer.

Dans la colonne du chemin, j'ai de nombreux enregistrements et je dois modifier seulement une partie du chemin, mais pas le chemin entier. Et je dois changer la même chaîne pour la nouvelle, dans chaque enregistrement.

Comment puis-je faire cela avec un simple update?

Iralda Mitro
la source

Réponses:

604

C'est aussi simple que ça:

update my_table
set path = replace(path, 'oldstring', 'newstring')
cjk
la source
43
J'ajoutais généralement where path like '%oldstring%'s'il y avait beaucoup de données.
Derek Tomes
1
où condition est logique car si j'ai 50 lignes dans le tableau et si je remplace 10 lignes par la fonction replace, cela affecte les 50 lignes, même si elle remplace 10 lignes si vous n'avez pas la condition where. Mais si vous avez une condition telle que mentionnée dans le commentaire ci-dessus, elle n'affecte que 10 lignes.
iMalek
132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
Marc Gravell
la source
1
désolé, ne pas être tatillon après dix ans mais on ne sait pas si la réponse fooest remplacée ou bar (désolé encore)
Alex
28

J'ai essayé ce qui précède mais cela n'a pas donné le résultat correct. Le suivant fait:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
César
la source
11
Cela va totalement à l'encontre du but de l'utilisation de la méthode replace. Vous pouvez accomplir la même chose comme ceci: update table set path = 'newstring' where path = 'oldstring';
Ian
11
peut-être que vous vouliez dire where path like '%oldstring%'?
v010dya
17
UPDATE CustomReports_Ta
SET vchFilter = REPLACE(CAST(vchFilter AS nvarchar(max)), '\\Ingl-report\Templates', 'C:\Customer_Templates')
where CAST(vchFilter AS nvarchar(max)) LIKE '%\\Ingl-report\Templates%'

Sans la CASTfonction, j'ai une erreur

Le type de données d'argument ntextn'est pas valide pour l'argument 1 de la replacefonction.

Igor Bakay
la source
9

Vous pouvez utiliser cette requête

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'
Nitika Chopra
la source
8

toutes les réponses sont excellentes mais je veux juste vous donner un bon exemple

select replace('this value from table', 'table',  'table but updated')

cette instruction SQL remplacera l'existence du mot "table" (deuxième paramètre) à l'intérieur de l'instruction donnée (premier paramètre) par le troisième paramètre

la valeur initiale est, this value from tablemais après avoir exécuté la fonction de remplacement, il serathis value from table but updated

et voici un vrai exemple

UPDATE publication
SET doi = replace(doi, '10.7440/perifrasis', '10.25025/perifrasis')
WHERE doi like '10.7440/perifrasis%'

par exemple, si nous avons cette valeur

10.7440/perifrasis.2010.1.issue-1

cela deviendra

10.25025/perifrasis.2010.1.issue-1

j'espère que cela vous donne une meilleure visualisation

Basheer AL-MOMANI
la source
6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

où "ImagePath" est le nom de ma colonne.
"NewImagePath" est la colonne temporelle Le nom insted de "ImagePath"
"~ /" est ma chaîne actuelle. (Ancienne chaîne)
"../" est ma chaîne requise. (Nouvelle chaîne)
"tblMyTable" est ma table dans la base de données.

Durgesh Pandey
la source
4

Si le type de colonne cible est différent de varchar / nvarchar comme du texte , nous devons convertir la valeur de la colonne en chaîne, puis la convertir en:

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'
khichar.anil
la source
2

vous devez remplacer le chemin à l'aide de la fonction de remplacement.

update table_name set column_name = replace(column_name, 'oldstring', 'newstring')

se column_nameréfère ici à cette colonne que vous souhaitez modifier.

J'espère que cela fonctionnera.


la source
0

Vous pouvez également remplacer le gros texte du modèle d'e-mail au moment de l'exécution, voici un exemple simple pour cela.

DECLARE @xml NVARCHAR(MAX)
SET @xml = CAST((SELECT [column] AS 'td','',        
        ,[StartDate] AS 'td'
         FROM [table] 
         FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
select REPLACE((EmailTemplate), '[@xml]', @xml) as Newtemplate 
FROM [dbo].[template] where id = 1
Shekhar Patel
la source