Vous pouvez utiliser .net
fonctions d'expression régulière. Par exemple, en utilisant Regex.Replace
:
Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);
Comme il n'y a pas de support pour les expressions régulières dans SQL Server
vous devez créer un SQL CLR
une fonction. Plus d'informations sur le .net
intégration dans SQL Server
peut être trouvé ici :
- Exemple de fonctions utilitaires de chaîne :exemples de travail complets
- Escalier vers SQLCLR - toujours en cours
- Introduction à l'intégration SQL Server CLR - documentation officielle
Dans votre cas :
-
Ouvrez
Visual Studio
et créezClass Library Project
: -
Renommez ensuite la classe en
StackOverflow
et collez le code suivant dans son fichier :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)); } }
-
Maintenant, construisez le projet. Ouvrez le
SQL Server Management Studio
. Sélectionnez votre base de données et remplacez la valeur du chemin duFROM
suivant clause pour correspondre à votreStackOverflow.dll
:CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
-
Enfin, créez le
SQL CLR
fonction :CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX)) RETURNS NVARCHAR(4000) AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace] GO
Vous êtes prêt à utiliser RegexReplace
.net
fonctionnent directement dans votre T-SQL
déclarations :
SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')
//Hello Kitty Essential Accessory Kit