从 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 函数。这需要:
实现:
方案一:
<code class="language-csharp">Regex.Replace(inputString, @"[^\u0000-\u007F]", string.Empty);</code>
方案二:
<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中文网其他相关文章!