サードパーティのデータ ソース (CSV ファイルなど) からデータをインポートすると、SQL Server の VARCHAR 列に奇妙な文字 (Â など) が頻繁に発生します。これは、不確実なエンコード方法が原因で発生する一般的な問題です。ただし、データベース レベルとコード レベルの両方で、これらの文字をクリーンアップして削除する効率的な方法があります。
SQL Server は正規表現をネイティブにサポートしていないため、SQL CLR 関数を作成して .NET の正規表現機能を利用できます。具体的な手順は次のとおりです。
StackOverflow
に変更し、次のコードを貼り付けます: <code class="language-csharp">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)); } }</code>
プロジェクトをビルドし、結果の StackOverflow.dll
をマシン上の既知の場所にコピーします。
アセンブリを SQL Server にインポートします:
<code class="language-sql"> CREATE ASSEMBLY [StackOverflow] FROM 'path_to_StackOverflow.dll';</code>
SQL CLR 関数の作成:
<code class="language-sql"> CREATE FUNCTION [dbo].[StackOverflowRegexReplace] (@input NVARCHAR(MAX), @pattern NVARCHAR(MAX), @replacement NVARCHAR(MAX)) RETURNS NVARCHAR(4000) AS EXTERNAL NAME [StackOverflow].[StackOverflow].[Replace] GO</code>
関数を作成した後、それを T-SQL ステートメントで直接使用して、文字を迅速かつ効率的に置換できます。
<code class="language-sql">SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')</code>
これにより、Â 文字が削除された文字列「Hello Kitty Essential Accessories Kit」が返されます。
C# ソリューションを使用したい場合は、Regex.Replace
メソッドを使用して同じ文字置換を実行できます。
<code class="language-csharp">string input = "Hello Kitty Essential Accessory Kit"; string output = Regex.Replace(input, @"[^\u0000-\u007F]", string.Empty); Console.WriteLine(output); // "Hello Kitty Essential Accessory Kit"</code>
この方法は、C# コード内の非ラテン文字を削除する簡単で信頼性の高い方法を提供します。
以上がSQL Server の VARCHAR 列から非ラテン文字 (Â など) を効率的に削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。