Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuń dziwne znaki (A z kapeluszem) z kolumny varchar SQL Server

Możesz użyć .net funkcje wyrażeń regularnych. Na przykład za pomocą Regex.Replace :

Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);

Ponieważ nie ma obsługi wyrażeń regularnych w SQL Server musisz utworzyć SQL CLR funkcjonować. Więcej informacji o .net integracja z SQL Server można znaleźć tutaj:

  • Przykład funkcji narzędziowych ciągów – pełne przykłady działania
  • Schody do SQLCLR – wciąż w toku
  • Wprowadzenie do integracji SQL Server CLR – oficjalna dokumentacja

W Twoim przypadku:

  1. Otwórz Visual Studio i utwórz Class Library Project :

  2. Następnie zmień nazwę klasy na StackOverflow i wklej następujący kod do jego pliku:

    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. Teraz zbuduj projekt. Otwórz SQL Server Management Studio . Wybierz swoją bazę danych i zastąp wartość ścieżki w następującym FROM klauzula pasująca do Twojego pliku StackOverflow.dll :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Na koniec utwórz SQL CLR funkcja:

    CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX),@pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX))
    RETURNS NVARCHAR(4000)
    AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace]
    GO
    

Jesteś gotowy do użycia RegexReplace .net działać bezpośrednio w twoim T-SQL oświadczenia:

    SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')

    //Hello Kitty Essential Accessory Kit


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 sygnatury czasowe wstawiania i aktualizowania wierszy

  2. SQL Server Konwertuj Varchar na Datetime

  3. Nie można połączyć się z serwerem SQL za pomocą PHP

  4. Co stanie się z identyfikatorem klucza podstawowego, gdy przekroczy limit?

  5. Najlepszy sposób na wyłapanie naruszeń unikalnych ograniczeń sql w c# podczas wstawiania