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

时间:2016-06-09 09:25:29

标签: sql-server tsql collation

我需要在我在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,这不应该发生。

我很确定这是一个区分重音的问题,但我不知道如何使用替换功能。

感谢任何输入!

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

除了Jeroen Mostert的回答,如果您需要区分大小写的解决方案,请尝试使用此代码。 请注意使用的归类中的 CS =“区分大小写”。

如果您需要处理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