Heim >Backend-Entwicklung >C++ >Wie entferne ich ungewöhnliche Zeichen (z. B. Zeichen mit Akzent) aus einer SQL Server-Varchar-Spalte mithilfe von .NET und SQL CLR?
Sonderzeichen (mit Akzent A) in SQL Server-Varchar-Spalten löschen
Frage:
Unerwartete Zeichen, wie zum Beispiel „A mit Akzent“, schleichen sich in die Varchar-Spalte der Tabelle ein. Diese unerwünschten Besucher stammen höchstwahrscheinlich aus CSV-Feeds, was es schwierig macht, ihre Herkunft zurückzuverfolgen. Wie können wir die Spalten schnell bereinigen und diese unerwünschten Zeichen auf Datenbankebene und in C# entfernen?
Lösung:
.NET-Funktion für reguläre Ausdrücke
In der riesigen Welt von .NET haben wir in regulären Ausdrucksfunktionen wie Regex.Replace einen mächtigen Verbündeten gefunden. Mit diesem leistungsstarken Tool können wir die Kraft des Mustervergleichs und der Manipulation nutzen, um unerwünschte Zeichen einfach zu löschen:
<code>Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);</code>
SQL CLR-Funktionen
Leider fehlt SQL Server die native Unterstützung für reguläre Ausdrücke, aber SQL CLR-Funktionen können diese Lücke schließen. Durch die Integration von .NET und SQL Server können wir die leistungsstarken Funktionen von .NET-Funktionen in T-SQL-Anweisungen nutzen.
Schritt-für-Schritt-Anleitung zum Erstellen von SQL CLR-Funktionen:
<code>// .NET正则表达式在SQL CLR函数中 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)); } }</code>
Zeigen Sie die Kraft Ihrer Schöpfung, indem Sie Projekte erstellen. Gehen Sie in den Tempel von SQL Server Management Studio und führen Sie ihn zum Pfad zur Datenbank. Mit diesem Wissen erstellt der folgende Befehl den Pfad zu StackOverflow.dll für Sie:
<code> CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';</code>
SQL CLR-Funktion erstellen:
<code> CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX)) RETURNS NVARCHAR(4000) AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace] GO</code>
Entfessle die Magie
Ihre SQL CLR-Funktionen sind bereit, Ihnen direkten Zugriff auf reguläre .NET-Ausdrucksfunktionen zu ermöglichen:
<code>SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '') // Hello Kitty Essential Accessory Kit</code>
Mit dieser neu entdeckten Leistung können Sie unerwünschte Zeichen ganz einfach aus SQL Server-Varchar-Spalten entfernen und so die Reinheit Ihrer Daten sicherstellen.
Das obige ist der detaillierte Inhalt vonWie entferne ich ungewöhnliche Zeichen (z. B. Zeichen mit Akzent) aus einer SQL Server-Varchar-Spalte mithilfe von .NET und SQL CLR?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!