Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Supprimer les caractères étranges (A avec un chapeau) de la colonne varchar de SQL Server

Vous pouvez utiliser .net fonctions d'expression régulière. Par exemple, en utilisant Regex.Replace :

Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);

Comme il n'y a pas de support pour les expressions régulières dans SQL Server vous devez créer un SQL CLR une fonction. Plus d'informations sur le .net intégration dans SQL Server peut être trouvé ici :

  • Exemple de fonctions utilitaires de chaîne :exemples de travail complets
  • Escalier vers SQLCLR - toujours en cours
  • Introduction à l'intégration SQL Server CLR - documentation officielle

Dans votre cas :

  1. Ouvrez Visual Studio et créez Class Library Project :

  2. Renommez ensuite la classe en StackOverflow et collez le code suivant dans son fichier :

    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. Maintenant, construisez le projet. Ouvrez le SQL Server Management Studio . Sélectionnez votre base de données et remplacez la valeur du chemin du FROM suivant clause pour correspondre à votre StackOverflow.dll :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Enfin, créez le SQL CLR fonction :

    CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX))
    RETURNS NVARCHAR(4000)
    AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace]
    GO
    

Vous êtes prêt à utiliser RegexReplace .net fonctionnent directement dans votre T-SQL déclarations :

    SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')

    //Hello Kitty Essential Accessory Kit