删除SQL Server字段末尾的隐藏字符

Moh*_* RK 2 sql sql-server sql-server-2008

我有一个奇怪的情况显示SQL服务器的价值.存在于SQL Server 2008字段中的值在从服务器查询时显示,并在Management Studio中显示(请参见下文).

测试模板2

但是当在HTML编辑器中显示在屏幕上时,它显示为?(见下文)

测试模板2?

当我检查ascii值时,它显示63.不确定用户如何在SQL服务器中将此特殊值添加到此字段中.当我通过输入测试?进入输入字段并显示它没有任何问题.我不想盲目地删除此字段中的最后一个字符.我试图确定一个解决方案来识别这个不可见的值,并在存储或显示时删除它.非常感谢任何解决方案.

正如下面的评论所示,结果证明这是Unicode 8203(零宽度空间).我的下一个问题是如何在T-SQL中的一个语句中替换此Unicode 8203而不解析每个字符?

Bry*_*yan 6

使用REPLACE删除零宽度空格字符:

-- setup unicode string containing zero-width character
DECLARE @UnicodeReplace NVARCHAR(5) = N'Test' + NCHAR(8203);

-- check that unicode string length is 5,
-- and prove existence of zero-width space character matching unicode 8203
SELECT @UnicodeReplace AS String,
       LEN(@UnicodeReplace) AS Length,
       UNICODE(SUBSTRING(@UnicodeReplace, 5, 1)) AS UnicodeValue

-- replace and prove the unicode string length is reduced to 4
SELECT REPLACE(@UnicodeReplace, NCHAR(8203), N''),
       LEN(REPLACE(@UnicodeReplace, NCHAR(8203), N'')) AS Length;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴