web-dev-qa-db-fra.com

SQL Remplacez plusieurs caractères différents dans la chaîne

J'ai besoin de remplacer plusieurs caractères dans une chaîne. Le résultat ne peut contenir ni '&' ni virgule.

J'ai actuellement:

REPLACE(T2.[ShipToCode],'&','and')

Mais comment mettez-vous plusieurs valeurs?

Merci beaucoup!

16
coblenski

Il vous suffit de les connecter en guirlande:

REPLACE(REPLACE(T2.[ShipToCode], '&', 'and'), ',', '')
23
Siyual

Un commentaire mentionne "des dizaines d'appels de remplacement" ... si vous supprimez des dizaines de caractères uniques, vous pouvez également utiliser Traduire et un seul remplacement.

REPLACE(TRANSLATE(T2.[ShipToCode], '[];'',$@', '#######'), '#', '')
8
CLaFarge

Nous avons utilisé une fonction pour faire quelque chose de similaire qui faisait une boucle dans la chaîne, bien que ce soit principalement pour supprimer les caractères qui n'étaient pas dans la chaîne "@ValidCharacters". Cela a été utile pour supprimer tout ce que nous ne voulions pas - généralement des caractères non alphanumériques, bien que je pense que nous avions également de l'espace, des guillemets, des guillemets simples et une poignée d'autres dans cette chaîne. Il a vraiment été utilisé pour supprimer les caractères non imprimables qui avaient tendance à se faufiler parfois, ce qui peut ne pas être parfait pour votre cas, mais peut vous donner quelques idées.

CREATE FUNCTION [dbo].[ufn_RemoveInvalidCharacters]
 (@str VARCHAR(8000), @ValidCharacters VARCHAR(8000))
RETURNS VARCHAR(8000)
BEGIN
  WHILE PATINDEX('%[^' + @ValidCharacters + ']%',@str) > 0
   SET @str=REPLACE(@str, SUBSTRING(@str ,PATINDEX('%[^' + @ValidCharacters +
']%',@str), 1) ,'')
  RETURN @str
END
6
Peter Schott