在导出csv时,如何删除SQL Server 2008查询的尾部空格?

0 人关注

问题是这样的。 我在SQL Server Management Studio中运行一个查询。 我点击 "将结果保存为...",并将文件保存为CSV。 当我打开CSV文件时(用记事本或任何文本编辑器),每一列都添加了尾部空格,以使它们具有统一宽度。 这非常令人沮丧,因为当我用Excel打开该文件时,它自动将字段转换为列,将账户号码等改为科学符号。

在SQL Server 2005中,没有添加尾部空格,所以Excel只是把所有的数据放在一个列中。 然后我可以将文本转换为列,并指定每一列为文本。 但是我的公司已经把我换成了SQL Server 2008,现在唯一能得到正确格式的方法是把CSV导入Access,在Access中运行Trim函数(从而改变字段名)以去除空格,然后从Access导出到Excel。 为什么SQL Server 2008要添加尾部空格,哪里有选项可以让它停止?

解决方法:请看我下面的答案。

1 个评论
请注意,尾部的空格是在导出到CSV之后添加的。 它们不存在于SQL Server的结果集中。 但在导出的CSV文件中,它们确实存在。
sql-server
sql-server-2008
Michael T
Michael T
发布于 2011-09-06
3 个回答
M.R.
M.R.
发布于 2011-09-07
0 人赞同

你可以在sql中使用ltrim和rtrim来修剪结果,所以你的结果集不包括尾部的空格...

select ltrim(rtrim(field) as trimmedField from table
这并没有帮助。 在我导出CSV后,结果集中才有空格存在。 在SQL Management Studio窗口中的结果集也没有空格。
M.R.
但是你说你在导出到excel之前,先把CSV文件放到access里,把后面的空格去掉,所以不是导出到excel的时候出现了空格。你能否在文本编辑器中打开CSV文件,比如记事本(在你从sql server中保存之后),看看其中是否有空格?
是的--如果我在记事本中打开文本文件,有尾部的空格。 但是在SQL Server中,我没有看到尾部的空格。 而且,如果我在SQL Server 2005中运行完全相同的查询,这个问题就不会发生。 CSV文件中没有添加空格。
好吧,我把查询限制在宽度一致的字段,所以没有尾部的空格。 但是,Excel打开的文件仍然是自动格式化的列,所以账户号码是科学符号。 当我用SQL Server 2005做了完全相同的过程,然后在Ecel中打开CSV,所有的数据都在一个列中。 然后我就可以进行文本到列的操作,以正确的格式化它。 这两个CSV文件看起来是一样的,但是由SQL Server 2008创建的那个文件打开的方式不同。 我是否应该重新发布我的问题,不要提及尾部空格?
M.R.
你可以通过在excel中对数字进行格式化来非常容易地改变科学符号。你有没有办法把文件中的数据摘录出来?听起来在2008年他们改进了CSV的输出,所以excel自动识别了制表符的空格...
obotezat
obotezat
发布于 2011-09-07
0 人赞同

也许问题在于你在表的模式中使用 char ncar ,而不是 varchar nvarchar 。改变列的类型可能会导致生成的CSV不再有尾部的空格。

这里有一个关于类型差异的链接。 在SQL Server中,char、ncar、varchar和nvarchar之间有什么区别?

Michael T
Michael T
发布于 2011-09-07
已采纳
0 人赞同