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 Studio
en maakClass Library Project
: -
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)); } }
-
Bouw nu het project op. Open de
SQL Server Management Studio
. Selecteer uw database en vervang de padwaarde van de volgendeFROM
clausule die overeenkomt met uwStackOverflow.dll
:CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
-
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