我在使用replicate('',n)进行固定长度文件格式化时遇到了这个问题。后来我切换到下划线只是为了确保它不是那个空格。之后我在一个字段的末尾有一些标签,我无法对抗,一旦放入记事本(任何类型,任何编码)或其他编辑器,它会增加额外的4b。我将此问题缩小到此测试代码,在所有具有默认设置的MS服务器上进行了尝试, 所以现在,如果我将v2粘贴到记事本中,我再次得到那些额外的字节,如果我导出的话,同样的事情。我看到替换删除1 b但仍有其他东西,我也尝试了char(13)+ char(10)。 如果html会吃东西,我有v2 = 60。 总而言之。
DECLARE @vv VARCHAR(1000) = 'Alpha Bravo Charlie_________________________________________ ';
DECLARE @vv2 VARCHAR(1000) = REPLACE(@vv,CHAR(9),'');
SELECT @vv v1, LEN(@vv) len1, CHARINDEX(@vv,CHAR(9)) i9, '--' [-->], @vv2 v2, LEN(@vv2) len2
答案 0 :(得分:1)
如果有帮助,这里有一个用于去除控制字符的UDF
CREATE FUNCTION [dbo].[udf-Str-Strip-Control](@S varchar(max))
Returns varchar(max)
Begin
;with cte1(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)),
cte2(C) As (Select Top (32) Char(Row_Number() over (Order By (Select NULL))-1) From cte1 a,cte1 b)
Select @S = Replace(@S,C,' ')
From cte2
Return LTrim(RTrim(Replace(Replace(@S,' ',' '),' ',' ')))
End
--Select [dbo].[udf-Str-Strip-Control]('Michael'+char(13)+char(10)+'LastName') --Returns: Michael LastName