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

use*_*401 7 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;
Run Code Online (Sandbox Code Playgroud)

我知道set colsep','命令是问题,然而,无法弄清楚要替换它的内容.有没有人有任何建议?

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

Wil*_*uck 7

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

set colsep '|'
Run Code Online (Sandbox Code Playgroud)

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

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

"data 1","data 2","data,with,commas"
Run Code Online (Sandbox Code Playgroud)

要做到这一点,每一个分离器将需要","这样你就可以

set colsep '","'
Run Code Online (Sandbox Code Playgroud)

这在每行的开头和结尾都没有引号,因此您可以用引号将每一行包装在引号中sed:

sed 's/^[^$]*$/"&"/' 
Run Code Online (Sandbox Code Playgroud)


Bel*_*Bob 1

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

select a
      , '"' || trim(B) || '"' as b
      , c
from your_table;
Run Code Online (Sandbox Code Playgroud)

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