我需要在我在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
,这不应该发生。
我很确定这是一个区分重音的问题,但我不知道如何使用替换功能。
感谢任何输入!
答案 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