Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Xóa các ký tự lạ (A có mũ) khỏi cột varchar của SQL Server

Bạn có thể sử dụng .net các hàm biểu thức chính quy. Ví dụ:sử dụng Regex.Replace :

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

Vì không có hỗ trợ cho các biểu thức chính quy trong SQL Server bạn cần tạo SQL CLR hàm số. Thông tin thêm về .net tích hợp trong SQL Server có thể được tìm thấy ở đây:

  • Mẫu các hàm tiện ích chuỗi - các ví dụ hoạt động đầy đủ
  • Nấc thang lên SQLCLR - vẫn đang được tiến hành
  • Giới thiệu về Tích hợp CLR SQL Server - tài liệu chính thức

Trong trường hợp của bạn:

  1. Mở Visual Studio và tạo Class Library Project :

  2. Sau đó đổi tên lớp thành StackOverflow và dán mã sau vào tệp của nó:

    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. Bây giờ, hãy xây dựng dự án. Mở SQL Server Management Studio . Chọn cơ sở dữ liệu của bạn và thay thế giá trị đường dẫn của FROM sau mệnh đề phù hợp với StackOverflow.dll của bạn :

    CREATE ASSEMBLY [StackOverflow] FROM 'C:\Users\gotqn\Desktop\StackOverflow\StackOverflow\bin\Debug\StackOverflow.dll';
    
  4. Cuối cùng, tạo SQL CLR chức năng:

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

Bạn đã sẵn sàng sử dụng RegexReplace .net hoạt động trực tiếp trong T-SQL của bạn tuyên bố:

    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. Sử dụng điều kiện if trong SQL Server chèn

  2. RADIANS () Ví dụ trong SQL Server

  3. Các chốt máy chủ SQL - Các chốt khác cần biết về

  4. Cách thay đổi thông số giá trị bảng

  5. T-SQL - Bí danh sử dụng =so với as