Oracle中的假脱机在列中添加空格。。。我怎样才能避免呢?

Oracle中的假脱机在列中添加空格。。。我怎样才能避免呢?,oracle,spool,Oracle,Spool,我正在将查询结果保存在csv文件中,但当数据库中的原始数据不包含不需要的空格时,会将其添加到某些字段中 例如,如果DB中的一行具有值how、are和you,则假脱机后我在文件中得到的是一行,如下所示: 编辑不让我写更多的空间,但你可以想象有很多空间 当我只希望它是: 我尝试了几个设置选项,但没有结果。有没有办法避开这些空间?提前谢谢 到目前为止,我得到的是: SET ECHO OFF; SET NEWP 0 SPACE 0 PAGES 0 FEED OFF HEAD OFF TRIMS OFF

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

例如,如果DB中的一行具有值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的调用。

您的表包含定义为CHARnn的列,该列用空格填充整个值,或者您的应用程序沿字符串存储额外的空格

使用rtrim移除尾随坯料-安装

 select c1||'|'||c2||'|'||c3
 from tst;
使用

如果有前导空格和尾随空格,也可以使用ltrim

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

正如注释中指出的,可以使用功能微调

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

谢谢你的更新。所以你在尝试这样的事情:

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 | |'|'|'|'|'|'|'|'| col3,并注意列格式,例如日期。

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

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

你能给我们看看你的代码吗?添加到主帖子;将其转换为CSV格式的最终目标是什么?例如,您是否只想在Excel中清晰地查看它?还是用于后续的自动数据处理?这是第二种情况,数据需要进一步处理。您可以使用trimc1而不是ltrimrtrimc1。使用trim函数,并在select子句中设置分隔符,而不是使用colsep,我得到了我想要的。我将运行更多的测试,但现在看起来不错。观察结果很好,我可能对列数据中的前导空格和尾随空格猜错了。列格式会有什么问题?其中一个字段实际上是日期,但我无法想象有任何风险。我只是说日期的格式将取决于nls_date_格式和桌面区域设置,除非您显式地将格式设置为to_char。另外,请确保为输出记录设置了足够大的linesize。
 select  trim(c1)||'|'||trim(c2)||'|'||trim(c3)
 from tst;
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
sqlplus ***/***@*** << EOF | sed -e 's/[\t ]*[,$]/,/g' > outputfile.txt
set head off
set colsep ','
etc...
select whatever from sometable;
exit;
EOF