2010-12-03 17 views
63

J'ai besoin de mettre à jour les valeurs d'une colonne, avec une substitution de sous-chaîne en cours sur les valeurs existantes.Chaîne T-SQL remplacer dans la mise à jour

Exemple:

données contient [email protected], [email protected] etc.

Je dois mettre à jour les valeurs telles que @domain2 est remplacé par @domain1.

+0

Combien d'adresses e-mail chaque colonne contient-elle? Est-ce que abc @ domain1 et pqr @ domain2 sont dans la même colonne? – dana

+0

ouais - ils sont dans la même colonne .. – Sekhar

Répondre

119

La syntaxe de REPLACE:

REPLACE (expression_chaîne, string_pattern, string_replacement)

Pour que le SQL dont vous avez besoin doit être:

UPDATE [DataTable] SET [ColumnValue] = REPLACE([ColumnValue], 'domain2', 'domain1') 
4
update YourTable 
    set YourColumn = replace(YourColumn, '@domain2', '@domain1') 
    where charindex('@domain2', YourColumn) <> 0 
+0

Est-ce que l'inclusion de la clause where comme dans cette réponse apporte des gains d'efficacité par rapport à la réponse acceptée? –

8

Si quelqu'un prend soin, pour NTEXT , utilisez le format suivant:

SELECT CAST(REPLACE(CAST([ColumnValue] AS NVARCHAR(MAX)),'find','replace') AS NTEXT) 
    FROM [DataTable] 
+1

Cette instruction en elle-même n'exécute pas la mise à jour. vous devez faire ce qui suit: UPDATE [DataTable] SET SET [ColumnValue] = CAST (REPLACE (CAST ([ColumnValue] AS NVARCHAR (MAX)), 'domain2', 'domain1') AS NTEXT) FROM [DataTable] –