sql >> データベース >  >> RDS >> Sqlserver

sql-serverのアクセントとすべての文字<>a..zを削除するにはどうすればよいですか?

    これを達成するための最良の方法は、非常にシンプルで効率的です:

    SELECT 'àéêöhello!' Collate SQL_Latin1_General_CP1253_CI_AI
    

    'aeeohello!'

    を出力します

    文字列はUnicodeであってはなりません。 nvarcharがある場合は、collat​​eを使用する前にvarcharにキャストするだけです。

    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
    

    次に、コマンド:

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

    出力

    aeacsdf
    


    1. 初心者向けのSQLOR演算子

    2. WHERE + KEY_Date + ='+date+'を使用したSQLiteException

    3. MariaDBでのSUBTIME()のしくみ

    4. Oracle 11g Express Edition for Windows 64ビット?