如何在导出到csv时从SQL Server 2008查询中删除尾随空格?

问题描述:

问题出在这里。我在SQL Server Management Studio中运行查询。我点击“将结果另存为...”并将文件另存为CSV。当我打开CSV文件(使用记事本或任何文本编辑器)时,每列都添加了尾部空格,以使它们具有统一的宽度。这是非常令人沮丧的,因为当我用Excel打开文件时,它会自动将字段转换为列,将帐号等更改为科学记数法。如何在导出到csv时从SQL Server 2008查询中删除尾随空格?

使用SQL Server 2005,没有添加尾随空格,所以Excel只将所有数据放在一个列中。然后我可以将文本转换为列,并将每一列指定为文本。但是我的公司已将我切换到SQL Server 2008,现在获得正确格式的唯一方法是将CSV导入到Access中,在Access中运行Trim函数(并因此更改字段名称)以除去空格,然后导出从Access到Excel。请帮忙!!!为什么SQL Server 2008添加了尾随空格,以及在哪里可以停止?

已解答:请参阅下面的答案。

+0

请注意,尾随空格获取添加导出为CSV文件后。它们不存在于SQL Server的结果集中。它们存在于生成的CSV文件中。 –

虽然为什么一个CSV通过创建我还没有想出Excel中的SQL Server 2008的行为与在SQL Server 2005中创建的行为不同,我发现了解决我眼前的问题的方法。

首先,尾随空格似乎不成问题。但是,SS2008在SS2005没有的地方添加了它们,这很烦人。但这不是我的问题的主要原因。

当右键单击生成的CSV文件,然后单击打开方式 - > Excel时,它会自动格式化为格式不正确的列(其中SS2005的CSV文件打开并显示单列中的所有数据)。为了解决这个问题,我只需打开Excel,然后在Excel中打开CSV文件。这给了我缺少的列格式化对话框。

你可以只使用LTRIM和SQL RTRIM修剪的结果,所以你的结果集不包括后面的空格...

 

select ltrim(rtrim(field) as trimmedField from table 
 
+0

这没有帮助。直到我导出为CSV后,空格才会存在于结果集中。 SQL Management Studio窗口中的结果集没有空格。 –

+0

,但你说你把CSV文件存取以摆脱尾随空格,在你将它导出到excel之前,所以它不会导出到excel,而是把空格。你可以在文本编辑器(如记事本)中打开CSV文件(在你从sql server中保存后),看看里面是否有空格? –

+0

是的 - 如果我在记事本中打开文本文件有尾随空格。但在SQL Server中,我看不到尾随空格。而且,如果我在SQL Server 2005中运行完全相同的查询,则不会发生此问题。 CSV文件中没有添加空格。 –

也许问题是,你正在使用焦炭NCHAR在表的模式,而不是VARCHAR为nvarchar的。更改列类型可能会导致生成的CSV不再有尾随空格。

这里是一个类型差异的链接:What is the difference between char, nchar, varchar, and nvarchar in SQL Server?