web-dev-qa-db-fra.com

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

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

Dans la colonne de chemin, j'ai beaucoup d'enregistrements et je n'ai besoin de changer qu'une partie du chemin, mais pas le chemin en 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?

344
Iralda Mitro

C'est aussi simple que ça:

update my_table
set path = replace(path, 'oldstring', 'newstring')
568
cjk
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
127
Marc Gravell

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

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
25
Caesar
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 fonction CASTj'ai eu une erreur

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

17
Igor Bakay

Vous pouvez utiliser cette requête

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

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

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

cette instruction SQL remplacera le mot "table" (second 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 table mais après l'exécution de la fonction replace, il s'agira de this value from table but updated

et voici un exemple réel

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

il deviendra

10.25025/perifrasis.2010.1.issue-1

espérons que cela vous donne une meilleure visualisation

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

où "ImagePath" est mon nom de colonne.
"NewImagePath" est le nom de la colonne de temporisation installée de "ImagePath"
"~ /" est ma chaîne actuelle. (ancienne chaîne)
"../" est la chaîne requise. (nouvelle chaîne)
"tblMyTable" est ma table dans la base de données.

6
Durgesh Pandey

Si le type de colonne cible est différent de varchar/nvarchar comme text, 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'
4
khichar.anil

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

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

ici column_name fait référence à la colonne que vous souhaitez modifier.

J'espère que ça va marcher.

2
user11441779

Vous pouvez également remplacer un texte volumineux pour un modèle de courrier électronique au moment de l’exécution. Voici un exemple simple.

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
0
Shekhar Patel