Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将结果输出为管道分隔格式并添加额外空间_Sql_Sql Server 2014 - Fatal编程技术网

Sql 将结果输出为管道分隔格式并添加额外空间

Sql 将结果输出为管道分隔格式并添加额外空间,sql,sql-server-2014,Sql,Sql Server 2014,在使用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_N

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

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

可能不是空格。可能是账单

当您从SSMS的
Results
窗格复制一行并将该行粘贴到文本编辑器中,或者至少粘贴到记事本++中时,它会在列之间插入一个选项卡。启用
显示所有字符
或等效项进行验证

您可以按照Jerry Jeremiah在评论中的建议,将输出减少到一个长行,从而绕过此问题:

SELECT CONCAT(B.BUSINESS_UNIT,'|',
              C.DESCR,'|',
              CONVERT(CHAR(10),B.INVOICE_DT,121),'|',
              B.INVOICE_ID,'|' 
              etc.)
他是你的朋友。它为您处理所有的数据类型转换,除了像
INVOICE_DT
这样需要
CHAR
的边缘情况(尽管我认为这里对
varchar(x)
进行隐式转换会得到您期望的结果)


另外,在不声明长度的情况下,谨慎地使用
varchar
。如果在错误的位置执行,它可以默认为
varchar(1)
,这很少是任何人想要的。请参阅。

这可能不是一个空间。可能是账单

当您从SSMS的
Results
窗格复制一行并将该行粘贴到文本编辑器中,或者至少粘贴到记事本++中时,它会在列之间插入一个选项卡。启用
显示所有字符
或等效项进行验证

您可以按照Jerry Jeremiah在评论中的建议,将输出减少到一个长行,从而绕过此问题:

SELECT CONCAT(B.BUSINESS_UNIT,'|',
              C.DESCR,'|',
              CONVERT(CHAR(10),B.INVOICE_DT,121),'|',
              B.INVOICE_ID,'|' 
              etc.)
他是你的朋友。它为您处理所有的数据类型转换,除了像
INVOICE_DT
这样需要
CHAR
的边缘情况(尽管我认为这里对
varchar(x)
进行隐式转换会得到您期望的结果)



另外,在不声明长度的情况下,谨慎地使用
varchar
。如果在错误的位置执行,它可以默认为
varchar(1)
,这很少是任何人想要的。请参阅。

不确定SQL Server,但您不能使用
B.BUSINESS_UNIT+'''124;'、C.DESCR+''124;'、…
而不是
B.BUSINESS_UNIT+'.'''.+C.DESCR+'.+..
CONCAT(B.BUSINESS_UNIT'.'124;'、C.DESCR'.'124;'、…)
@Nick,请在您的问题中添加您的结果。这就是我们如何更好更快地帮助您:)谢谢!是--为了澄清一点,您选择了9列并添加了管道字符。相反,您希望选择一个以@JerryJeremiah显示的方式添加管道字符的列。我知道唯一的问题是,结果在列值和“|”(管道符号)之间有空格。如何解析管道零件并不重要,重要的是删除空间。。。这就是我得到它的原因。我确实尝试将格式设置为仅1个长列,但随后我得到了一些完全为空的行,我认为可能是因为某些行上的1个或多个列具有一些空值。不确定SQL Server,而是使用
B.BUSINESS_UNIT+'|',C.DESCR+'|',尼克,请在你的问题中加上你的结果。这就是我们如何更好更快地帮助您:)谢谢!是--为了澄清一点,您选择了9列并添加了管道字符。相反,您希望选择一个以@JerryJeremiah显示的方式添加管道字符的列。我知道唯一的问题是,结果在列值和“|”(管道符号)之间有空格。如何解析管道零件并不重要,重要的是删除空间。。。这就是我得到它的原因。我确实尝试将格式设置为只有一个长列,但是我得到了一些完全为空的行,我想可能是因为某些行上的一个或多个列有一些空值。感谢您给出答案。我喜欢帮助别人,但很少有时间写出一个漂亮的答案。我经常是同舟共济的。我确实试着对事情做了充分的阐述,我不仅仅是把你的评论当作一个答案谢谢你的回答。如果它在一个或多个列中遇到
NULL
,该怎么办?您将得到两个相邻的管道,它们之间没有任何内容。此外,如果您经常这样做,或者需要对其进行操作,这样您就不会整天复制和粘贴,SSIS会将此类任务作为早餐。感谢您给出答案。我喜欢帮助别人,但很少有时间写出一个漂亮的答案。我经常是同舟共济的。我确实试着对事情做了充分的阐述,我不仅仅是把你的评论当作一个答案谢谢你的回答。如果在一个或多个列中遇到
NULL
,该怎么办?您将得到两个相邻的管道,它们之间没有任何内容。此外,如果您要经常这样做,或者需要对其进行操作,以便您不需要整天复制和粘贴,SSIS会将此类任务作为早餐。