将结果输出为管道分隔格式,并增加额外的空间

问题描述 投票:1回答:1

未成功使用SQL Manager的输出选项后,我在管道中进行硬编码以使输出管道定界。问题是在管道和下一列之间添加了一个空格。我已经尝试了LTRIM函数,但没有删除空格。

SELECT B.BUSINESS_UNIT+'|'
       , C.DESCR+'|'
       , (CONVERT(CHAR(10),B.INVOICE_DT,121) + '|')
       , CAST(B.INVOICE_ID AS varchar) + '|'
       , CAST(A.LINE_NBR AS varchar) + '|'
       , CAST(B.GROSS_AMT AS varchar) + '|'
       , CAST(B.VENDOR_ID AS varchar) + '|'
       , D.NAME1 + '|'
       , CAST(M.ITM_ID_VNDR AS varchar) + '|'
       , J.DESCR + '|'
FROM Some_Table1 B 
     , SomeTable2 C
     , SomeTable3 A
     , SomeTable4 D
     , SomeTable5 J
     , SomeTable6 M 

如果将结果复制到文本编辑器,则管道和下一列之间会有一个空格。

sql sql-server-2014
1个回答
0
投票

可能不是空格。这可能是一个标签。

当您从SSMS的Results窗格复制一行并将该行粘贴到文本编辑器或至少粘贴到Notepad ++时,它将在各列之间插入一个选项卡。开启Show All Characters或等效功能以进行验证。

您可以通过在评论中遵循Jerry Jeremiah的建议,并将输出减少为一行来解决:

SELECT CONCAT(B.BUSINESS_UNIT,'|',
              C.DESCR,'|',
              CONVERT(CHAR(10),B.INVOICE_DT,121),'|',
              B.INVOICE_ID,'|' 
              etc.)

[CONCAT()是您的朋友在这里。它会为您处理所有数据类型的转换,但像CONCAT()这样的极端情况下您需要INVOICE_DT(尽管我认为此处隐式转换为CHAR会给您带来预期的结果) 。

此外,也要谨慎声明为varchar(x),而不声明长度。如果在错误的位置执行此操作,则它可能默认为varchar,很少有人会这样做。参见varchar(1)

© www.soinside.com 2019 - 2024. All rights reserved.