我正在尝试编写从多个字段中提取数据的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.
答案 0 :(得分:1)
您会在第一个代码段中看到换行符,因为您正在查看Management Studio中的“消息”窗口。该代码没有结果。您在第二个片段中看到的是Management Studio如何显示结果。可以把它想象成数据的调试视图。 Management Studio不是报告工具。 原始数据中存在char(13)
值 ;它只是没有在这个视图中显示给你。
然而,仍有三个问题。
第一个问题是如何将数据传输到Excel。如果这是一个VBA宏或通过库完成直接创建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 使用替换/替换来完成,但我没有尝试过。