Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come rimuovere gli accenti e tutti i caratteri <> a..z in sql-server?

Il modo migliore per raggiungere questo obiettivo è molto semplice ed efficiente :

SELECT 'àéêöhello!' Collate SQL_Latin1_General_CP1253_CI_AI

che restituisce 'aeeohello!'

La stringa non deve essere unicode. Se hai un nvarchar, esegui il cast su varchar prima di utilizzare il fascicolazione.

Ecco una funzione che risponde alle esigenze dell'OP:

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

Quindi, il comando:

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

uscite

aeacsdf