Tsql:CHARINDEX和REPLACE无法识别特殊字符(Unicode-8207)

时间:2017-11-14 13:27:17

标签: tsql unicode special-characters charindex

给出以下变量:

declare @str nvarchar(50) = 'a‏bc' 

在'a'和'b'之间有一个隐藏的字符:nchar(8207)

因此:

select len(@str) --4

select unicode(SUBSTRING(@str,2,1)) --8207

我的问题是我有很多这样的记录,我必须找到所有这些字符并删除它们。

我正在尝试通过CHARINDEXREPLACE查找,但它只是无法识别此字符:

select CHARINDEX(Nchar(unicode(8207)),@str) --0
select REPLACE (@str , Nchar(unicode(8207)), '1') --abc

1 个答案:

答案 0 :(得分:0)

似乎REPLACE()确实不起作用。 您似乎需要使用STUFF()

DECLARE @Moo NVARCHAR(50) = CONCAT('a', NCHAR(8207), 'b', 'c')

SELECT   @Moo
        ,LEN(@Moo)
        ,LEN(STUFF(@moo, 2, 1, ''))
        ,STUFF(@moo, 2, 1, '')

然而,这使您不得不知道违规的不可打印字符的位置。 WHILE循环或Tally表可能会为您提供良好的服务。