在Oracle中进行假脱机会为列添加空格...我该如何避免它?

时间:2015-11-10 15:08:22

标签: oracle spool

我将查询结果保存在csv文件中,但当数据库中的原始数据不包含这些字段时,会在某些字段中添加不需要的空格。

例如,如果数据库中的某一行的值为“how”,“are”和“you”,则在假脱机后我在文件中得到的内容如下:

"how    |  are |you      "

(编辑不会让我写更多空格,但你可以想象有很多空格)

当我想要它时:

"how|are|you"

我尝试了几个没有结果的设置选项。有没有办法避免这些空间?提前谢谢!

到目前为止我得到了什么:

SET ECHO OFF;
SET NEWP 0 SPACE 0 PAGES 0 FEED OFF HEAD OFF TRIMS OFF TRIM OFF TAB OFF;
set colsep '|';
set lines 130;

spool myfile.csv

SELECT * FROM SOME_TABLE;

spool off;

这是对sqlplus的调用。

3 个答案:

答案 0 :(得分:2)

您的表格包含定义为CHAR(nn)的列,其中使用空白<​​/ em>填充值到整个长度,或者您的应用程序会在字符串中存储其他空格。

使用rtrim删除尾随空白 -

的instaed
 select c1||'|'||c2||'|'||c3
 from tst;

使用

 select rtrim(c1)||'|'||rtrim(c2)||'|'||rtrim(c3)
 from tst;

如果同时包含前导和尾随空白

,请使用ltrim
 select ltrim(rtrim(c1))||'|'||ltrim(rtrim(c2))||'|'||ltrim(rtrim(c3))
 from tst;

<强>更新

正如评论中所指出的,可以使用函数trim代替

 select  trim(c1)||'|'||trim(c2)||'|'||trim(c3)
 from tst;

答案 1 :(得分:2)

感谢您的更新。所以你要尝试这样的事情:

set colsep "|"

with demo as
   ( select 'Various' as col1, 'test' as col2, 'examples' as col3 from dual
     union all select 'How', 'are', 'you' from dual )
select col1, col2, col3
from   demo;

COL1   |COL2|COL3
-------|----|--------
Various|test|examples
How    |are |you

不幸的是,SQL * Plus并非设计用于卸载这样的数据 - 分隔符严格用于列。你必须自己用管道连接值,例如: col1 || '|' || col2 || '|' || col3 {并注意列格式,例如日期)。

答案 2 :(得分:0)

如果您在 Linux 或 Unix 上工作,请考虑:

sqlplus ***/***@*** << EOF | sed -e 's/[\t ]*[,$]/,/g' > outputfile.txt
set head off
set colsep ','
etc...
select whatever from sometable;
exit;
EOF