문자열의 악센트를 제거하려면 어떻게 해야 합니까?
다음 문자열을 가지고 있습니다.
áéíóú
그것을 변환해야 합니다.
aeiou
어떻게 하면 달성할 수 있습니까? (비교할 필요가 없습니다. 저장할 새 문자열이 필요합니다.)
사용해 보십시오.COLLATE
:
select 'áéíóú' collate SQL_Latin1_General_Cp1251_CS_AS
유니코드 데이터의 경우 다음을 시도하십시오.
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
사용자 정의 함수
create function dbo.fnRemoveAccents(@str nvarchar(max))
returns varchar(max) as
begin
return 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
end
번역 기능을 사용합니다.
SELECT TRANSLATE(
N'INPUT: ïÜ×ÌùµŪč©īĐÃÙěÓńÿâŘåòÔÕłćýçÀŻūìóèůüíÄûØõäÕťżîŃà£êřßøŽÖáďÉęúÂĪāËžŮōÑÇĆź®Š¥ĘĒśŹĚŚšŸ¢ŁéąÈđÆÍÛĄÝĎēČÊŌŇöÏňëÎæãŤñÒÚĀÅÁô',
N'ÁÀÂÃÄÅàáâãäåĀāąĄæÆÇçćĆčČ¢©đĐďĎÈÉÊËèéêëěĚĒēęĘÌÍÎÏìíîïĪīłŁ£ÑñňŇńŃÒÓÔÕÕÖØòóôõöøŌōřŘ®ŠšśŚßťŤÙÚÛÜùúûüůŮŪūµ×¥ŸÿýÝŽžżŻźŹ',
N'aaaaaaaaaaaaaaaaaaccccccccddddeeeeeeeeeeeeeeiiiiiiiiiilllnnnnnooooooooooooooooorrsssssttuuuuuuuuuuuuuxyyyyyzzzzzz');
-- OUTPUT: 'INPUT: iuxiuuuccidaueonyaraooolcycazuioeuuiauooaotzioaleosozoadeeuaiaezuoncczrsyeeszessycleaedaiuaydeceonoineiaatnouaaao'
더 많은 '닮은' 문자를 찾으려면 이 링크를 확인하십시오.
때로는 문자열에 다른 조합이 있을 수 있으므로 결과에 여전히 억양이 있습니다.이 경우 다음 행을 사용할 수 있습니다(여기에 있는 솔루션을 기준으로 함).
SELECT convert(varchar, your_string) COLLATE SQL_Latin1_General_Cp1251_CS_AS;
저도 같은 문제가 있었습니다.그리스어에서 UPPER()로 올바르게 변환하려면 액센트를 억제해야 합니다.데이터 정렬을 변경하면 다른 응용 프로그램에서 문제가 발생합니다.일부 REPLACE() 기능을 추가하여 대조를 유지하는 동작을 더 제어할 수 있었습니다.아래는 나의 TopUpperCaseGR 기능입니다.
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
다음 기능을 사용합니다.
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
COLLATE 및 악센트에 민감하지 않은 ()과 함께 TRANSLATE() 함수를 사용합니다.AI
) 간편한 캐치-올 교체를 위한 조합:
SELECT TRANSLATE('TÉST ínpüt' COLLATE Latin1_General_CS_AI, 'AEIOUaeiou', 'AEIOUaeiou')
-- OUTPUT: 'TEST input'
언급URL : https://stackoverflow.com/questions/3578582/how-can-i-remove-accents-on-a-string
'programing' 카테고리의 다른 글
UI이미지를 NSData로 변환 (0) | 2023.06.26 |
---|---|
Postgresql에서 "대소문자를 구분하지 않는" 쿼리를 만드는 방법은 무엇입니까? (0) | 2023.06.26 |
C# MongoDB: 도메인 개체를 올바르게 매핑하는 방법은 무엇입니까? (0) | 2023.06.26 |
Excel VBA의 전역 변수를 워크북에 표시하도록 선언하는 방법 (0) | 2023.06.26 |
Java 레코드를 @Service / @RestController 주석과 함께 사용해도 됩니까? (0) | 2023.06.26 |