Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Remova caracteres estranhos (A com chapéu) da coluna varchar do SQL Server


Você pode usar .net funções de expressão regular. Por exemplo, usando Regex.Replace :
Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);

Como não há suporte para expressões regulares no SQL Server você precisa criar um SQL CLR função. Mais informações sobre o .net integração no SQL Server pode ser encontrado aqui:
  • Amostra de funções de utilitário de string - exemplos completos de trabalho
  • Escada para SQLCLR - ainda em andamento
  • Introdução à integração CLR do SQL Server - documentação oficial

No seu caso:

  1. Abra o Visual Studio e crie o Class Library Project :



  2. Em seguida, renomeie a classe para StackOverflow e cole o seguinte código em seu arquivo:
    using Microsoft.SqlServer.Server;
    using System;
    using System.Collections.Generic;
    using System.Data.SqlTypes;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;
    
    public class StackOverflow
    {
        [SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, Name = "RegexReplace")]
        public static SqlString Replace(SqlString sqlInput, SqlString sqlPattern, SqlString sqlReplacement)
        {
            string input = (sqlInput.IsNull) ? string.Empty : sqlInput.Value;
            string pattern = (sqlPattern.IsNull) ? string.Empty : sqlPattern.Value;
            string replacement = (sqlReplacement.IsNull) ? string.Empty : sqlReplacement.Value;
            return new SqlString(Regex.Replace(input, pattern, replacement));
        }
    }
    

  3. Agora, construa o projeto. Abra o SQL Server Management Studio . Selecione seu banco de dados e substitua o valor do caminho do seguinte FROM cláusula para corresponder ao seu StackOverflow.dll :
    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    

  4. Por fim, crie o SQL CLR função:
    CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX))
    RETURNS NVARCHAR(4000)
    AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace]
    GO
    

Você está pronto para usar RegexReplace .net função diretamente em seu T-SQL declarações:
    SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')

    //Hello Kitty Essential Accessory Kit