将包含换行符的SQL查询输出粘贴到单个Excel单元格中

时间:2018-03-06 19:31:32

标签: sql excel sql-server-2008

我正在尝试编写从多个字段中提取数据的SQL代码,并将其显示在单个字段中,但是在多行中显示。目标是输出到Excel,在单个单元格中保留多行 。我们当前的程序只是使用Excel将两个字段连接到一个带有回车符的单元格中,但是如果可能的话,我想让SQL做到这一点。

例如:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13)  + 'This is line 2.'
print @text

显示:

This is line 1.   
This is line 2.

更改为选择:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
select @text

显示:

This is line 1. This is line 2.

我想将该输出复制并粘贴到Excel中,并将数据显示在单个单元格中,这样所有这些都在一个单元格中:

This is line 1.   
This is line 2.

3 个答案:

答案 0 :(得分:1)

您会在第一个代码段中看到换行符,因为您正在查看Management Studio中的“消息”窗口。该代码没有结果。您在第二个片段中看到的是Management Studio如何显示结果。可以把它想象成数据的调试视图。 Management Studio不是报告工具。 原始数据中存在char(13) ;它只是没有在这个视图中显示给你。

然而,仍有三个问题。

第一个问题是如何将数据传输到Excel。如果这是一个VBA宏或通过库完成直接创建Excel原生文件,你可能很好。其他选项都有问题:

  • 如果复制/粘贴,则从正在不存在换行符的调试视图中复制。
  • 如果您正在运行创建CSV文件或类似文件的程序,那么您依赖的是Excel的CSV解析器,它无法很好地处理换行符。
  • 如果您正在使用"结果文字"或"结果到文件"管理工作室中的功能,角色就在那里,但您还要处理Excel无法自动处理的一些额外的页眉和页脚文本(尽管您可以将其用作复制/粘贴源)。

对于第二个问题,即使在某些情况下,您拥有char(13),这只是Windows系统中断行的一半。您还需要额外的CHAR(10)才能在某些情况下显示,例如:

SET @text = 'This is line 1.' + char(13) + CHAR(10) + 'This is line 2.'

最后一个问题是Excel是否会尊重换行符,即使它真的存在。 Excel单元格不喜欢换行符。它希望您在新行中拥有这种数据。打开一个新的空白工作表,让我知道你有多少成功,甚至手动输入两行文本到同一个单元格。您可能需要明确告诉Excel包装文本,或更改默认视图。

答案 1 :(得分:0)

在SQL查询中,使用:

而不是回车符
   " & CHAR(10) & "

列以等号双引号开头,以双引号结尾。因此,SQL的输出将是:

="This is line 1." & CHAR(10) & "This is line 2."

将此放入Excel。这看起来像一团糟,直到你确定在格式单元格下你已经选中'Wrap Text',然后回车符将出现在单元格中。

答案 2 :(得分:0)

我发现上面的 @tysonwright 答案既聪明又有用,但对我来说,即使我粘贴了值,CHAR(10) 也会导致包装的单元格中出现两个“换行符”(ALT-Enter)。

所以,我是这样解决的:

用管道(或您选择的任何唯一字符)替换 CRLF 并删除任何重复项的 SQL:

 SELECT replace(notes2,'||','|') as Notes2 from
    (
    SELECT replace(notes,char(13)+char(10),'|') as Notes2
    FROM   mytable
    ) z

然后在EXCEL中查找-替换管道“|”到按 CTRL-SHIFT-J 输入的换行符 How to Replace Text with NewLine

这使得换行的文本看起来好像是用换行符 (ALT-Enter) 输入的,这是我无法用 char(13)、char(10) 的任何组合完成的。

它可能可以在 VBA 或公式中使用 vblf 使用替换/替换来完成,但我没有尝试过。