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

Tsql 如何替换transact-sql中的字符代码?,tsql,Tsql,我正在尝试修复由于复制/粘贴而插入到某些内容中的Microsoft word智能引号(以及其他word智能字符)。当我们正在为这个问题制定一个永久性的解决方案时,我正在尝试创建一个脚本,以便在数据出现问题时修复它 要测试它,我正在运行以下查询:从DigArticleArticle中选择title,其中ArticleId=8249。这将正确检索标题,并带有无效字符引起的问号。要替换此查询,我尝试了以下查询: select REPLACE(title, CHAR(8216), char(39)),

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

要测试它,我正在运行以下查询:
从DigArticleArticle中选择title,其中ArticleId=8249
。这将正确检索标题,并带有无效字符引起的问号。要替换此查询,我尝试了以下查询:

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

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

来自参数上的MSDN文档

字符(整数\表达式)

论据

整数表达式

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

8216大于255,因此为空

返回类型

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

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

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


根据,您应该在参数的MSDN文档中使用nchar

字符(整数\表达式)

论据

整数表达式

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

8216大于255,因此为空

返回类型

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

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

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

根据,您应该改用nchar

尝试:

select REPLACE(title, NCHAR(8216), char(39)), Title from DigArticleArticle where ArticleID = 8249
如上所述,CHAR()处理ASCII字符(0-255)。在这种情况下,需要Unicode版本,NCHAR()可以处理范围为0-65535的字符。请尝试:

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

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

DigArticle与Article是同一个表吗?是的,抱歉,我键入了第一行并复制了第二行。我将修复DigArticle与Article是同一个表吗?是的,对不起,我打了第一行,抄了第二行。我将修正它+1,但是你可以考虑改进你的答案来解释你的代码为什么它会有帮助。例如,NCHAR的参数有一个061535的范围,它支持Unicode,而Car()只支持ASCII…为了更多地看到元问题感谢建议,也添加解释。+ 1,但你可以考虑改进你的答案来解释你的代码为什么会有帮助。例如,NCHAR的参数有一个范围05-655,它支持Unicode,而Car()仅支持ascii…有关更多信息,请参阅元问题谢谢您的建议,并添加了解释。