Supprimer les caractères inhabituels des colonnes VARCHAR de SQL Server
Contexte :
Certains caractères non standard, notamment les caractères avec des signes diacritiques (comme avec un chapeau), sont stockés dans les colonnes varchar de SQL Server. Ce problème résulte d'un contrôle limité sur l'importation de la source de données .csv.
Solution :
Option 1 : Utiliser les expressions régulières .NET
En C#, vous pouvez utiliser des expressions régulières pour supprimer ces caractères. Vous pouvez utiliser la méthode String.Replace comme indiqué ci-dessous :
<code class="language-csharp">Regex.Replace(s, @"[^\u0000-\u007F]", string.Empty);</code>
Option 2 : Créer une fonction SQL CLR
Étant donné que SQL Server ne prend pas en charge nativement les expressions régulières, vous pouvez créer une fonction SQL CLR. Cela nécessite :
Mise en œuvre :
Option 1 :
<code class="language-csharp">Regex.Replace(inputString, @"[^\u0000-\u007F]", string.Empty);</code>
Option 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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!