7

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

4

3 回答 3

7

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

set colsep '|'

大多数可以读取的软件都可以csv使用这种格式。

如果这对您不起作用,您可以意识到要在列中处理逗号,您需要将每个数据项括在引号中:

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

为此,每个分隔符都需要","这样,您可以

set colsep '","'

这不会在每行的开头和结尾有引号,因此您可以将每一行用引号括起来sed

sed 's/^[^$]*$/"&"/' 
于 2013-03-15T20:22:55.047 回答
2

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

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

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

于 2014-05-03T22:24:04.260 回答
1

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

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

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

于 2013-03-15T20:21:44.733 回答