Comment replace un tréma dans une fonction T-SQL

J'ai besoin de replace les trémas dans une fonction que j'ai définie dans T-SQL.

Mon code ressemble à ceci:

CREATE FUNCTION [dbo].[my_function](@s varchar(4000)) RETURNS varchar(4000) AS BEGIN SET @s = UPPER(@s) SET @s = REPLACE(@s, 'Ä', 'AE') RETURN @s END 

Quand je äpfel je reçois AEPFEL , ce qui est mon résultat attendu,

Mais quand je AEPFEL apfel je reçois aussi AEPFEL , ce qui n'est pas supposé arriver.

Je suis à peu près sûr que c'est une question de collation sensible à l'accent, mais je n'ai aucune idée de comment l'utiliser avec la fonction de rlocation.

Toute consortingbution est appréciée!

Vous pouvez spécifier un classment de manière explicite par expression de string:

 set @s = replace(@s COLLATE Latin1_General_CI_AS, 'Ä', 'AE') 

Et après cela, REPLACE prendra en count les accents. Notez que vous ne pouvez pas mettre le COLLATE sur le paramètre ou la valeur de return, malheureusement, ce qui serait une solution plus évidente.

En plus de la réponse de Jeroen Mostert, essayez ce code si vous avez besoin d'une solution sensible à la casse. Notez le CS = "Case Sensitive" dans le classment utilisé.

Si vous devez gérer des caractères Unicode, vous devez également envisager d'utiliser des valeurs NVARCHAR.

 CREATE FUNCTION [dbo].[my_function](@s varchar(4000)) RETURNS varchar(4000) AS BEGIN SET @s = REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(@s COLLATE Latin1_General_CS_AS , 'Ä', 'AE') , 'Ö', 'OE') , 'Ü', 'UE') , 'ä', 'ae') , 'ö', 'oe') , 'ü', 'ue') , 'ß', 'ss') RETURN @s END SELECT dbo.my_function('AOUSS_aeouss_ÄäÖöÜüß') -- Result is AOUSS_aeouss_AEaeOEoeUEuess