首頁 >後端開發 >C++ >如何從 SQL Server VARCHAR 欄位中刪除不尋常的字元?

如何從 SQL Server VARCHAR 欄位中刪除不尋常的字元?

Linda Hamilton
Linda Hamilton原創
2025-01-11 09:03:45481瀏覽

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

從 SQL Server VARCHAR 欄位移除異常字元

背景:

某些非標準字符,特別是帶有變音符號的字符(例如帶帽子的 a),儲存在 SQL Server varchar 列中。此問題源自於對.csv 資料來源匯入的控制有限。

解:

方案一:使用 .NET 正規表示式

在 C# 中,您可以使用正規表示式來刪除這些字元。可以使用 String.Replace 方法,如下:

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

方案二:建立 SQL CLR 函數

由於 SQL Server 本身不支援正規表示式,因此可以建立 SQL CLR 函數。這需要:

  • 在 Visual Studio 中建立一個 .NET 類別庫專案
  • 使用正規表示式實作 Replace 函數
  • 建置專案並將組件新增至 SQL Server 資料庫
  • 建立一個包裝 .NET 函數的 SQL CLR 函數

實作:

方案一:

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

方案二:

  • 建立一個名為 StackOverflow 的 .NET 類,包含以下程式碼:
<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>
  • 建置專案並將組件新增至 SQL Server 資料庫
  • 建立 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>
  • 使用範例:
<code class="language-sql">SELECT [dbo].[StackOverflowRegexReplace] ('Hello Kitty Essential Accessory Kit', '[^\u0000-\u007F]', '')</code>

以上是如何從 SQL Server VARCHAR 欄位中刪除不尋常的字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn