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"; 不确定这是否会对答案产生影响.
两个可能的答案.它们都不完美.如果某些结果中有逗号但没有管道(|),则可以切换到以管道分隔的
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)
您可以通过用双引号将该列括起来来修改返回结果集的查询。假设b罪魁祸首是:
select a
, '"' || trim(B) || '"' as b
, c
from your_table;
Run Code Online (Sandbox Code Playgroud)
当然,正确的语法取决于您的 RDBMS 版本。
| 归档时间: |
|
| 查看次数: |
19552 次 |
| 最近记录: |