Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hapus karakter aneh ( A dengan topi) dari kolom varchar SQL Server

Anda dapat menggunakan .net fungsi ekspresi reguler. Misalnya, menggunakan Regex.Replace :

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

Karena tidak ada dukungan untuk ekspresi reguler di SQL Server anda perlu membuat SQL CLR fungsi. Informasi lebih lanjut tentang .net integrasi di SQL Server dapat ditemukan di sini:

  • Contoh Fungsi Utilitas String - contoh kerja lengkap
  • Tangga ke SQLCLR - masih dalam proses
  • Pengantar Integrasi SQL Server CLR - dokumentasi resmi

Dalam kasus Anda:

  1. Buka Visual Studio dan buat Class Library Project :

  2. Kemudian ganti nama kelas menjadi StackOverflow dan paste kode berikut di filenya:

    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. Sekarang, bangun proyeknya. Buka SQL Server Management Studio . Pilih database Anda dan ganti nilai jalur berikut FROM klausa untuk mencocokkan StackOverflow.dll . Anda :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Terakhir, buat SQL CLR fungsi:

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

Anda siap menggunakan RegexReplace .net berfungsi langsung di T-SQL . Anda pernyataan:

    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. Skrip Inventaris Koleksi SQL Server -1

  2. Pola Desain untuk Bidang Kustom dalam Basis Data Relasional

  3. Pisahkan satu kolom menjadi beberapa baris

  4. Kesalahan SQL Server 206:Bentrokan jenis operan

  5. Memahami Penganalisis Beban Kerja untuk Memetakan Kemacetan Kinerja