SQL Server の VARCHAR 列から異常な文字を削除します
背景:
特定の非標準文字、特に発音記号の付いた文字 (帽子付きの a など) は、SQL Server の varchar 列に格納されます。この問題は、.csv データ ソースのインポートに対する制御が制限されているために発生します。
解決策:
オプション 1: .NET 正規表現を使用する
C# では、正規表現を使用してこれらの文字を削除できます。以下に示すように String.Replace メソッドを使用できます:
<code class="language-csharp">Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);</code>
オプション 2: SQL CLR 関数の作成
SQL Server は正規表現をネイティブにサポートしていないため、SQL CLR 関数を作成できます。これには以下が必要です:
実装:
オプション 1:
<code class="language-csharp">Regex.Replace(inputString, @"[^\u0000-\u007F]", string.Empty);</code>
オプション 2:
<code class="language-csharp">[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>
<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>
<code class="language-sql">SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')</code>
以上がSQL Server の VARCHAR 列から異常な文字を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。