sql >> Database >  >> RDS >> Sqlserver

Verwijder rare tekens (A met hoed) uit de SQL Server varchar-kolom

U kunt .net . gebruiken reguliere expressie functies. Gebruik bijvoorbeeld Regex.Replace :

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

Aangezien er geen ondersteuning is voor reguliere expressies in SQL Server je moet een SQL CLR maken functie. Meer informatie over de .net integratie in SQL Server is hier te vinden:

  • Voorbeeld van stringhulpprogramma's - volledige werkende voorbeelden
  • Trap naar SQLCLR - nog in uitvoering
  • Inleiding tot SQL Server CLR-integratie - officiële documentatie

In jouw geval:

  1. Open Visual Studio en maak Class Library Project :

  2. Hernoem vervolgens de klasse naar StackOverflow en plak de volgende code in het bestand:

    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. Bouw nu het project op. Open de SQL Server Management Studio . Selecteer uw database en vervang de padwaarde van de volgende FROM clausule die overeenkomt met uw StackOverflow.dll :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Maak ten slotte de SQL CLR functie:

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

U bent klaar om RegexReplace te gebruiken .net direct functioneren in uw T-SQL uitspraken:

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

    //Hello Kitty Essential Accessory Kit


  1. Hoe de RPAD()-functie werkt in MySQL

  2. Manieren om eenvoudig de hoofddatabase in SQL Server opnieuw op te bouwen

  3. Chen-notatie

  4. Lijst met datum- en tijdfuncties in SQL Server (T-SQL)