sql >> データベース >  >> RDS >> Sqlserver

SQL Serverのvarchar列から奇妙な文字(帽子をかぶったA)を削除します

    .netを使用できます 正規表現関数。たとえば、Regex.Replaceを使用します :

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

    SQL Serverでは正規表現がサポートされていないため SQL CLRを作成する必要があります 働き。 .netに関する詳細情報 SQL Serverへの統合 ここで見つけることができます:

    • 文字列ユーティリティ関数のサンプル-完全な実例
    • SQLCLRへの階段-まだ進行中
    • SQLServerCLR統合の概要-公式ドキュメント

    あなたの場合:

    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. MySQLデータベースを作成する

    2. 外部キー参照アクションを変更するにはどうすればよいですか? (行動)

    3. SQLのインデックスとは何ですか?

    4. MariaDBJavaコネクタドライバーのパフォーマンス