当数据包含逗号时,将sql转换为CSV

时间:2013-03-15 20:02:37

标签: sql oracle sqlplus

我正在尝试使用命令提示符将sql查询假脱机到CSV文件,但是我返回的一列数据在数据中包含逗号并导致数据进入下一列。有办法解决这个问题吗?理想情况下,我希望在查询过程中返回此特定列,而不是最后。

我目前正在使用以下命令:

set termout off;
set colsep ',';
set underline off;
set feedback off;
set pagesize 0;
set linesize 1500;
set trimspool on;

我知道set colsep','命令是问题,但是,无法找出替换它的内容。有没有人有任何建议?

另外,在我的sql查询之前,我正在使用select语句来提取头信息。从双重中选择“a,b,c”;不确定这是否会对答案产生影响。

3 个答案:

答案 0 :(得分:7)

两个可能的答案。它们都不完美。如果某些结果中有逗号但没有管道(|),则可以切换到以

为管道分隔的管道
set colsep '|'

大多数可以阅读csv的软件都可以使用该格式。

如果这对你不起作用,你可以意识到要处理列中的逗号,你需要用引号包装每个数据项:

"data 1","data 2","data,with,commas"

为此,每个分隔符都需要",",以便

set colsep '","'

在每行的开头和结尾都没有引号,因此您可以使用sed用引号括起每一行:

sed 's/^[^$]*$/"&"/' 

答案 1 :(得分:2)

您可以修改选择查询,例如

select REPLACE(column_name, ',',' ') column name from table_name

这将用空格替换列数据中的逗号值。

答案 2 :(得分:1)

您可以通过用双引号括起该列来修改返回结果集的查询。假设b是罪魁祸首:

select a
      , '"' || trim(B) || '"' as b
      , c
from your_table;

当然,正确的语法取决于您的RDBMS版本。