如何替换 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
我需要替换我在 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