TSQL:制表符(非打印字符)删除,有问题



我在执行固定长度的文件格式时遇到了这个问题,这是使用 copy(' ',n 完成的)。后来我改用下划线只是为了确保它不是空格。 在那之后,我在一个字段的末尾得到了一些我无法战斗的选项卡,一旦放置在记事本(任何类型,任何编码)或其他编辑器中,它就会添加额外的 4b。我将此问题缩小到此测试代码,并在所有具有默认设置的MS服务器上尝试,所以现在如果我将 v2 粘贴到记事本中,我会再次获得这些额外的字节,如果我导出也是如此。我看到替换删除 1 b,但那里还有其他东西,我也尝试了 char(13) + char(10)。我有 v2 = 60,以防万一 html 会吃东西。Tx很多。

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

如果有帮助,这里有一个 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

最新更新