Alcuni personaggi strani vengono memorizzati in uno dei tavoli. Sembrano provenire da .csv
feed, quindi non ho molto controllo su questo.
Hello Kitty Essential Accessory Kit
Come posso pulirlo e rimuovere questi personaggi. Sto bene a farlo a livello di database o in C #.
MODIFICARE
Secondo i suggerimenti ricevuti nei commenti. Sto anche esaminando cosa posso fare per correggerlo a livello di feed. Ecco maggiori informazioni su di esso.
È ansible utilizzare le funzioni di espressione regolare .net
. Ad esempio, utilizzando Regex.Replace
:
Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);
Poiché non esiste alcun supporto per le espressioni regolari in SQL Server
è necessario creare una funzione SQL CLR
. Ulteriori informazioni sull’integrazione .net
in SQL Server
sono disponibili qui:
Nel tuo caso:
Apri Visual Studio
e crea il Class Library Project
:
Quindi rinomina la class in StackOverflow
e incolla il seguente codice nel suo file:
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)); } }
Ora, costruisci il progetto. Aprire SQL Server Management Studio
. Seleziona il tuo database e sostituisci il valore del percorso della seguente clausola FROM
in modo che corrisponda al tuo StackOverflow.dll
:
CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
Infine, crea la funzione SQL CLR
:
CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX)) RETURNS NVARCHAR(4000) AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace] GO
Sei pronto per utilizzare la funzione RegexReplace
.net
direttamente nelle istruzioni T-SQL
:
SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '') //Hello Kitty Essential Accessory Kit
se cerchi alfabeti e numeri solo in una stringa, questo può aiutarti.
In questo, Regex viene utilizzato per sostituire tutti i caratteri diversi da alfabeti e numeri.
Questo sembra funzionare:
string input = "Hello Kitty Essential Accessory Kit"; string res = Regex.Replace(input, @"[^a-zA-Z0-9\s]", ""); Console.WriteLine(res); // Hello Kitty Essential Accessory Kit
Prova questo:
DECLARE @str VARCHAR(400) DECLARE @expres VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!,Ã,Â]%' SET @str = 'Hello Kitty Essential Accessory Kit' WHILE PATINDEX( @expres, @str ) > 0 SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ') SELECT @str
Aggiungi qualsiasi carattere speciale che vuoi eliminare nella variabile @expres.
Spero che questo ti aiuti!