我有以下字符串
áéíóú
我需要将其转换为
aeiou
我怎样才能实现它? (我不需要比较,我需要保存新字符串)
答案 0 :(得分:93)
尝试使用COLLATE
:
select 'áéíóú' collate SQL_Latin1_General_Cp1251_CS_AS
对于Unicode数据,请尝试以下操作:
select cast(N'áéíóú' as varchar(max)) collate SQL_Latin1_General_Cp1251_CS_AS
在使用第二种方法时,我不确定您在翻译中可能会失去什么。
<强>更新强>
看起来œ
是一个特殊情况,我们必须分别处理大小写。你可以这样做(这段代码是用户定义函数的一个很好的候选者):
declare @str nvarchar(max) = N'ñaàeéêèioô; Œuf un œuf'
select cast(
replace((
replace(@str collate Latin1_General_CS_AS, 'Œ' collate Latin1_General_CS_AS, 'OE' collate Latin1_General_CS_AS)
) collate Latin1_General_CS_AS, 'œ' collate Latin1_General_CS_AS, 'oe' collate Latin1_General_CS_AS) as varchar(max)
) collate SQL_Latin1_General_Cp1251_CS_AS
-- Output:
-- naaeeeeioo; Oeuf un oeuf
答案 1 :(得分:1)
我遇到了同样的问题。在希腊语中正确转换为UPPER()你必须抑制重音。更改排序规则会导致其他应用程序出现问放置一些REPLACE()函数我可以更好地控制维护整理的行为。以下是我的 ToUpperCaseGR 功能。
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
答案 2 :(得分:1)
使用翻译功能:
SELECT TRANSLATE(
N'INPUT: ïÜ×ÌùµŪč©īĐÃÙěÓńÿâŘåòÔÕłćýçÀŻūìóèůüíÄûØõäÕťżîŃà£êřßøŽÖáďÉęúÂĪāËžŮōÑÇĆź®Š¥ĘĒśŹĚŚšŸ¢ŁéąÈđÆÍÛĄÝĎēČÊŌŇöÏňëÎæãŤñÒÚĀÅÁô',
N'ÁÀÂÃÄÅàáâãäåĀāąĄæÆÇçćĆčČ¢©đĐďĎÈÉÊËèéêëěĚĒēęĘÌÍÎÏìíîïĪīłŁ£ÑñňŇńŃÒÓÔÕÕÖØòóôõöøŌōřŘ®ŠšśŚßťŤÙÚÛÜùúûüůŮŪūµ×¥ŸÿýÝŽžżŻźŹ',
N'aaaaaaaaaaaaaaaaaaccccccccddddeeeeeeeeeeeeeeiiiiiiiiiilllnnnnnooooooooooooooooorrsssssttuuuuuuuuuuuuuxyyyyyzzzzzz');
-- OUTPUT: 'INPUT: iuxiuuuccidaueonyaraooolcycazuioeuuiauooaotzioaleosozoadeeuaiaezuoncczrsyeeszessycleaedaiuaydeceonoineiaatnouaaao'
检查此链接以查找更多“类似”字符:
答案 3 :(得分:0)
使用此功能:
CREATE FUNCTION [dbo].[F_RemoveDiacritics] (
@String varchar(max)
) RETURNS varchar(max)
AS BEGIN
DECLARE @StringResult VARCHAR(max);
select @StringResult= @String collate SQL_Latin1_General_Cp1251_CS_AS
return @StringResult
END
答案 4 :(得分:0)
有时,字符串可以具有另一个COLLATION,因此结果中仍带有重音符号。在这种情况下,您可以使用以下行(based on this solution here):
SELECT convert(varchar, your_string) COLLATE SQL_Latin1_General_Cp1251_CS_AS;