SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION ToUpperCaseGR
(
@word nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
-- Declare the return variable here
declare @res nvarchar(max)
set @res = UPPER(@word)
set @res = replace(@res,'Ά','Α')
set @res = replace(@res,'Έ','Ε')
set @res = replace(@res,'Ί','Ι')
set @res = replace(@res,'Ή','Η')
set @res = replace(@res,'Ό','Ο')
set @res = replace(@res,'Ύ','Υ')
set @res = replace(@res,'Ώ','Ω')
-- Return the result of the function
RETURN @res
END
GO
6条答案
按热度按时间cvxl0en21#
尝试使用
COLLATE
:对于Unicode数据,请尝试以下操作:
我不确定使用第二种方法时,您在翻译中可能会失去什么。
看起来
œ
是一个特例,我们必须分开处理大小写,你可以这样做(这段代码是一个很好的用户定义函数的候选者):t0ybt7op2#
使用转换函数:
查看此链接以查找更多“类似”字符:
https://github.com/apache/lucene-solr/blob/1ca7067a810578d4e246b5434b9cdcec7145d230/lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/ASCIIFoldingFilter.java#L189
brgchamk3#
有时候,字符串可以有另一个COLLATION,所以结果中仍然有重音符号。在这种情况下,可以使用下面的行(based on this solution here):
pkbketx94#
我也遇到了同样的问题。在希腊语中,为了正确地转换到UPPER(),你必须抑制重音。改变排序规则会在其他应用程序中引起问题。通过使用一些REPLACE()函数,我可以更好地控制维护排序规则的行为。下面是我的ToUpperCaseGR函数。
oyt4ldly5#
使用此功能:
nqwrtyyt6#
将TRANSLATE()函数与COLLATE和不区分重音的(
AI
)排序规则一起使用,可以轻松地进行全面替换: