2010-08-26 8 views
38

Ich habe die folgende ZeichenfolgeWie kann ich Akzente an einer Schnur entfernen?

áéíóú 

, die ich es

konvertieren müssen
aeiou 

Wie kann ich es erreichen? (Ich brauche nicht zu vergleichen, ich brauche die neue Zeichenfolge zu speichern)

+0

ich Lösung bin auf der Suche, die Akzente zu entfernen, aber alle fremden Buchstaben in Unicode verlassen. I.e. Ich muss "á" in "a" umwandeln, aber nicht "я" oder "жопа". –

Antwort

81

Versuchen COLLATE mit:

select 'áéíóú' collate SQL_Latin1_General_Cp1251_CS_AS 

Für Unicode-Daten, versuchen Sie Folgendes:

select cast(N'áéíóú' as varchar(max)) collate SQL_Latin1_General_Cp1251_CS_AS 

Ich bin nicht sicher, was Sie in der Übersetzung verlieren können, wenn Sie den zweiten Ansatz verwenden.

aktualisieren

Es sieht aus wie œ ein Sonderfall ist, und wir haben Groß- und Kleinschreibung getrennt zu behandeln. Sie können es so machen (dieser Code ist ein guter Kandidat für eine benutzerdefinierte Funktion):

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 
+3

+1 - Viel besser als meine verschachtelte 'REPLACE' – JNK

+4

Funktioniert nur für Nicht-Unicode-Spalten. D.h., wird nicht für 'N'áéíóú' funktionieren. – GSerg

+0

@ Gserg: guter Punkt! – RedFilter

2

Ich hatte das gleiche Problem. In Griechisch für die korrekte Umwandlung in UPPER() müssen Sie den Akzent unterdrücken. Das Ändern der Sortierung verursachte Probleme in anderen Anwendungen. Mit einigen REPLACE() - Funktionen hatte ich mehr Kontrolle über das Verhalten bei der Pflege der Sortierung. Unten ist meine ToUpperCaseGR Funktion.

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 
+0

Ωραίος Θάνο, εχχαριστώ. –

0

Mit dieser Funktion:

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 
Verwandte Themen