gpt4 book ai didi

c# - 从 SQL Server varchar 列中删除奇怪的字符(带帽子的 A)

转载 作者:行者123 更新时间:2023-11-30 13:30:36 24 4
gpt4 key购买 nike

一些奇怪的字符被存储在其中一个表中。它们似乎来自 .csv 提要,所以我对此没有太多控制权。

Hello Kitty Essential Accessory Kit

如何清理它并删除这些字符。我可以在数据库级别或 C# 中执行此操作。

编辑

根据评论中收到的建议。我也在研究如何在 Feed 级别纠正它。这是有关它的更多信息。

  1. Feed 来自第三方。
  2. 我在 Notepad++ 中打开提要并检查编码菜单我看到了点在“encode in ansi”前面,所以我相信这就是文件
  3. 这就是它在 Notepad++ 中的显示方式“Hello Kitty基本附件套件”
  4. 不过有一件奇怪的事。当我在 powershel 中搜索该行时.csv 文件。它与行一起出现。我不认为这些很奇怪那里的字符..

最佳答案

您可以使用.net 正则表达式函数。例如,使用 Regex.Replace:

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

由于 SQL Server 不支持正则表达式,您需要创建一个 SQL CLR 函数。有关 .netSQL Server 集成的更多信息,请参见此处:


在你的情况下:

  1. 打开 Visual Studio 并创建类库项目:

    enter image description here

  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

您已准备好在 T-SQL 语句中直接使用 RegexReplace .net 函数:

    SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')

//Hello Kitty Essential Accessory Kit

关于c# - 从 SQL Server varchar 列中删除奇怪的字符(带帽子的 A),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31692940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com