TSQL:tab(非打印字符)删除,出了点问题

时间:2017-01-11 22:58:18

标签: sql-server tsql

我在使用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

1 个答案:

答案 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