Rimuovere i caratteri strani (A con cappello) dalla colonna varchar di SQL Server

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.

  1. I feed sono di terze parti.
  2. Ho aperto il feed in Notepad ++ e ho controllato il menu di codifica. Vedo punto davanti a ‘encode in ansi’ quindi credo che sia la codifica del file
  3. Ed è così che appare nel blocco note ++ “Kit Kit accessorio Hello Kitty Essential”
  4. Una cosa strana però. quando cerco quella riga in powershel dal file csv. e arriva alla fila. Non vedo questi strani personaggi lì ..

È 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:

  • Esempio di funzioni di utilità di stringa : esempi operativi completi
  • Scala per SQLCLR – ancora in corso
  • Introduzione all’integrazione CLR di SQL Server – documentazione ufficiale

Nel tuo caso:

  1. Apri Visual Studio e crea il Class Library Project :

    inserisci la descrizione dell'immagine qui

  2. 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)); } } 
  3. 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'; 
  4. 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!