我正在尝试修复由于复制/粘贴而插入到某些内容中的Microsoft单词智能引号(以及其他单词智能字符)。当我们正在为此制定永久性解决方案时,我正在尝试创建一个脚本,以便在数据成为问题时修复数据。
为了测试它,我正在运行以下查询:select title from DigArticleArticle where ArticleId = 8249
。这正确检索我们的标题,由于无效字符而带有问号。要替换它,我尝试了以下查询:
select REPLACE(title, CHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249
这将返回null作为第一列。为什么我的替换会返回null?即使找不到字符代码,它仍应返回原始字符串。
答案 0 :(得分:3)
尝试:
select REPLACE(title, NCHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249
如上所述,CHAR()处理ASCII字符(0-255)。在这种情况下,需要Unicode版本,NCHAR()可以处理范围0-65535
答案 1 :(得分:1)
来自论坛for char
上的MSDN文档CHAR(integer_expression)
参数
integer_expression
是0到255之间的整数。如果整数表达式不在此范围内,则返回NULL。
8216大于255因此其空
退货类型
如果其中一个输入参数是nvarchar数据类型,则返回nvarchar;否则,REPLACE返回varchar。
如果任何一个参数为NULL,则返回NULL。
如果char(8216)
是替换
根据trekstuff's answer,您应该使用nchar