Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie entferne ich Akzente und alle Zeichen <> a..z im SQL-Server?

Der beste Weg, dies zu erreichen, ist sehr einfach und effizient :

SELECT 'àéêöhello!' Collate SQL_Latin1_General_CP1253_CI_AI

was 'aeeohello!'

ausgibt

Die Zeichenfolge darf nicht Unicode sein. Wenn Sie ein nvarchar haben, wandeln Sie es einfach in varchar um, bevor Sie die Sortierung verwenden.

Hier ist eine Funktion, die die OP-Anforderungen erfüllt:

create function [dbo].[RemoveExtraChars] ( @p_OriginalString varchar(50) )
returns varchar(50) as
begin

  declare @i int = 1;  -- must start from 1, as SubString is 1-based
  declare @OriginalString varchar(100) = @p_OriginalString Collate SQL_Latin1_General_CP1253_CI_AI;
  declare @ModifiedString varchar(100) = '';

  while @i <= Len(@OriginalString)
  begin
    if SubString(@OriginalString, @i, 1) like '[a-Z]'
    begin
      set @ModifiedString = @ModifiedString + SubString(@OriginalString, @i, 1);
    end
    set @i = @i + 1;
  end

  return @ModifiedString

end

Dann der Befehl:

select dbo.RemoveExtraChars('aèàç=.32s df')

Ausgänge

aeacsdf