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