如何替换 T-SQL 函数中的变音符号

How to replace an umlaut inside a T-SQL function

我需要替换我在 T-SQL 中定义的函数中的变音符号。

我的代码如下所示:

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

当我输入 äpfel 时,我得到 AEPFEL,这是我的预期结果,

但是当我输入 apfel 时,我也得到了 AEPFEL,这是不应该发生的。

我很确定这是区分重音的排序规则问题,但我不知道如何将其与替换功能一起使用。

欢迎任何意见!

您可以为每个字符串表达式明确指定排序规则:

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

此后 REPLACE 将考虑重音。请注意,您不能将 COLLATE 放在参数或 return 值上,不幸的是,这将是一个更明显的解决方案。

除了 Jeroen Mostert 的回答之外,如果您需要区分大小写的解决方案,请尝试此代码。 请注意使用的排序规则中的 CS = "Case Sensitive"。

如果您需要处理 unicode 字符,您还应该考虑使用 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