0

我正在尝试修复由于复制/粘贴而插入某些内容的 Microsoft 单词智能引号(和其他单词智能字符)。虽然我们正在努力解决这个问题,但我正在尝试创建一个脚本,以便我们可以在数据成为问题时对其进行修复。

为了测试它,我正在运行以下查询:select title from DigArticleArticle where ArticleId = 8249。这会正确检索我们的标题,由于无效字符而带有问号。为了替换它,我尝试了以下查询:

select REPLACE(title, CHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249

这将返回 null 作为第一列。为什么我的替换会返回 null?即使找不到字符代码,它仍应返回原始字符串。

4

2 回答 2

3

尝试:

select REPLACE(title, NCHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249

如上所述,CHAR() 处理 ASCII 字符 (0-255)。在这种情况下需要 Unicode 版本,NCHAR() 可以处理范围 0-65535

于 2012-06-21T20:28:47.483 回答
1

来自 MSDN Docs 关于char的论点

CHAR (整数表达式)

论据

整数表达式

是从 0 到 255 的整数。如果整数表达式不在此范围内,则返回 NULL。

8216 大于 255 所以它的 null

更换

返回类型

如果输入参数之一是 nvarchar 数据类型,则返回 nvarchar;否则,REPLACE 返回 varchar。

如果任一参数为 NULL,则返回 NULL。

因此,如果char(8216)是替换中的参数,您将始终返回 null

根据trekstuff 的回答,您应该改用 nchar

于 2012-06-21T20:23:39.300 回答