Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Премахнете странните знаци ( A с шапка) от колоната varchar на SQL Server

Можете да използвате .net функции на регулярни изрази. Например, като използвате Regex.Replace :

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

Тъй като няма поддръжка за регулярни изрази в SQL Server трябва да създадете SQL CLR функция. Повече информация за .net интеграция в SQL Server можете да намерите тук:

  • Образец на функциите за низови помощни програми – пълни работни примери
  • Стълба към SQLCLR – все още в ход
  • Въведение в интеграцията на SQL Server CLR – официална документация

Във вашия случай:

  1. Отворете Visual Studio и създайте Class Library Project :

  2. След това преименувайте класа на StackOverflow и поставете следния код в неговия файл:

    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. Сега изградете проекта. Отворете SQL Server Management Studio . Изберете вашата база данни и заменете стойността на пътя на следния FROM клауза, за да съответства на вашия StackOverflow.dll :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Накрая създайте 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
    

Готови сте да използвате RegexReplace .net функция директно във вашия T-SQL изявления:

    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. Какво прави транзакцията около едно изявление?

  2. Контролни точки на базата данни в SQL Server

  3. Разлика между извършено четене и повторяемо четене

  4. Как мога да конвертирам bigint (UNIX timestamp) в datetime в SQL Server?

  5. Разгледайте базата данни за възстановяване на SQL Server с възстановяване срещу опции за възстановяване