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

Fjern mærkelige tegn (A med hat) fra SQL Server varchar-kolonnen

Du kan bruge .net regulære udtryksfunktioner. For eksempel ved at bruge Regex.Replace :

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

Da der ikke er understøttelse af regulære udtryk i SQL Server du skal oprette en SQL CLR fungere. Flere oplysninger om .net integration i SQL Server kan findes her:

  • Eksempel på String Utility Functions - fulde arbejdseksempler
  • Trappe til SQLCLR - stadig i gang
  • Introduktion til SQL Server CLR-integration - officiel dokumentation

I dit tilfælde:

  1. Åbn Visual Studio og opret Class Library Project :

  2. Omdøb derefter klassen til StackOverflow og indsæt følgende kode i dens fil:

    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. Byg nu projektet. Åbn SQL Server Management Studio . Vælg din database og erstat stiværdien for følgende FROM klausul, der matcher din StackOverflow.dll :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Til sidst skal du oprette SQL CLR funktion:

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

Du er klar til at bruge RegexReplace .net funktion direkte i din T-SQL udsagn:

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

    //Hello Kitty Essential Accessory Kit


  1. Hvordan genererer man automatisk et unikt id i SQL som UID12345678?

  2. Sådan bootstrap MySQL eller MariaDB Galera Cluster - Opdateret

  3. En ny måde at personliggøre din PostgreSQL-overvågning med Prometheus

  4. Hvad er formålet med at bruge OPTION(MAXDOP 1) i SQL Server?