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:
-
Open
Visual Studioen maakClass Library Project:
-
Hernoem vervolgens de klasse naar
StackOverflowen 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)); } } -
Bouw nu het project op. Open de
SQL Server Management Studio. Selecteer uw database en vervang de padwaarde van de volgendeFROMclausule die overeenkomt met uwStackOverflow.dll:CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll'; -
Maak ten slotte de
SQL CLRfunctie: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