如何替换transact-sql中的字符代码?

时间:2012-06-21 20:20:37

标签: tsql

我正在尝试修复由于复制/粘贴而插入到某些内容中的Microsoft单词智能引号(以及其他单词智能字符)。当我们正在为此制定永久性解决方案时,我正在尝试创建一个脚本,以便在数据成为问题时修复数据。

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

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

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

2 个答案:

答案 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因此其空

For replace

  

退货类型

     

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

     

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

如果char(8216)是替换

中的参数,那么你总是会返回null

根据trekstuff's answer,您应该使用nchar