Você pode usar
.net
funções de expressão regular. Por exemplo, usando Regex.Replace
:Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);
Como não há suporte para expressões regulares no
SQL Server
você precisa criar um SQL CLR
função. Mais informações sobre o .net
integração no SQL Server
pode ser encontrado aqui:- Amostra de funções de utilitário de string - exemplos completos de trabalho
- Escada para SQLCLR - ainda em andamento
- Introdução à integração CLR do SQL Server - documentação oficial
No seu caso:
-
Abra oVisual Studio
e crie oClass Library Project
:
-
Em seguida, renomeie a classe paraStackOverflow
e cole o seguinte código em seu arquivo:
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)); } }
-
Agora, construa o projeto. Abra oSQL Server Management Studio
. Selecione seu banco de dados e substitua o valor do caminho do seguinteFROM
cláusula para corresponder ao seuStackOverflow.dll
:
CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
-
Por fim, crie oSQL CLR
função:
CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX)) RETURNS NVARCHAR(4000) AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace] GO
Você está pronto para usar
RegexReplace
.net
função diretamente em seu T-SQL
declarações: SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')
//Hello Kitty Essential Accessory Kit