我正在尝试使用命令提示符将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”;不确定这是否会对答案产生影响。
答案 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版本。