给出以下变量:
declare @str nvarchar(50) = 'abc'
在'a'和'b'之间有一个隐藏的字符:nchar(8207)
因此:
select len(@str) --4
和
select unicode(SUBSTRING(@str,2,1)) --8207
我的问题是我有很多这样的记录,我必须找到所有这些字符并删除它们。
我正在尝试通过CHARINDEX
或REPLACE
查找,但它只是无法识别此字符:
select CHARINDEX(Nchar(unicode(8207)),@str) --0
select REPLACE (@str , Nchar(unicode(8207)), '1') --abc
答案 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表可能会为您提供良好的服务。