Maison >développement back-end >C++ >Comment supprimer les caractères inhabituels d'une colonne VARCHAR SQL Server ?

Comment supprimer les caractères inhabituels d'une colonne VARCHAR SQL Server ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-11 09:03:45427parcourir

How to Remove Unusual Characters from a SQL Server VARCHAR Column?

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 :

  • Créer un projet de bibliothèque de classes .NET dans Visual Studio
  • Utilisez des expressions régulières pour implémenter la fonction Remplacer
  • Construisez le projet et ajoutez l'assembly à la base de données SQL Server
  • Créer une fonction SQL CLR qui encapsule une fonction .NET

Mise en œuvre :

Option 1 :

<code class="language-csharp">Regex.Replace(inputString, @"[^\u0000-\u007F]", string.Empty);</code>

Option 2 :

  • Créez une classe .NET appelée StackOverflow avec le code suivant :
<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>
  • Construisez le projet et ajoutez l'assembly à la base de données SQL Server
  • Créer une fonction 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>
  • Exemple d'utilisation :
<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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn