从 oracle 假脱机到 csv 时避免在列周围使用双引号
Avoid double quotes around column while spooling to csv from oracle
我需要使用假脱机将 select 查询输出导出到文本文件。默认情况下,输出会在列周围添加双引号。如何预防?
查询 returns 只有一列。
理想情况下,我需要删除 headers 以及输出中的双引号。下面是我在 oracle Developer 中使用的脚本文件。但标题也没有被删除。
set echo off
SET HEADING OFF
SET PAGESIZE 0
SET COLSEP ''
spool 'D:\public\cvs_txPCG.txt'
select /*csv*/
pcg from temptx;
spool off;
输出
"PCG"
"76259737020150320000504281565213310052440093515652109.2909.290101"
"19519905620160502000504283153419040044861008644759203.3903.390101"
"49424051620160220000504284594314590009220713032964404.3804.380202"
"88761197020151025000504284594315180036700812132964401.9901.990101"
如果双引号是数据的一部分,您可以使用 trim() 函数将其删除。
select /*csv*/
trim(both '"' from pcg) as pcg from temptx;
trim 函数的 Oracle 文档:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions199.htm
您无法使用 /*csv*/
指令删除 double-quotes。现在稍微更方便的方法是使用 sqlformat
命令,但即使使用 sqlformat delimited
you have to have the string enclosed.
无论如何,对单个列使用 CSV 格式似乎毫无意义,除非您的字符串中有您想要转义的分隔符。如果您真的要导出那一列并且没有分隔符,那么只需省略 /*csv*/
指令即可。如果您有多个可能包含定界符的列或字符串,那么在 Excel 或其他一些外部工具中打开时,附件可用于阻止这些定界符被误解。
如果您真的想要不带附件的 CSV 格式,您可以通过将列与逗号文字连接来手动构建输出,这仍然允许您假脱机到文件:
select pcg ||','|| some_other_col ||','|| etc from ...
或者您可以 运行 使用 运行 语句 (Ctrl-Enter) 进行查询,然后从数据网格中导出结果,从 [=36] 时出现的上下文菜单=] 在输出上。当您导出并选择 CSV 或分隔格式时,您可以选择是否包含 header 以及要使用的分隔符和附件 - 您可以选择 'none'。如果您不想在每次导出时都设置它,您可以将其设置为默认值,从 Tools->Preferences:
您不能使用 /*csv*/
指令或 sqlformat csv
执行此操作。
我知道它太旧了,但今天我的搜索得到了答案,只需使用
set markup csv on quote off
select 1 id, 'Venkat' name from dual;
输出将是
ID,NAME
1,Venkat
没想到其他任何 SET 命令
我需要使用假脱机将 select 查询输出导出到文本文件。默认情况下,输出会在列周围添加双引号。如何预防? 查询 returns 只有一列。
理想情况下,我需要删除 headers 以及输出中的双引号。下面是我在 oracle Developer 中使用的脚本文件。但标题也没有被删除。
set echo off
SET HEADING OFF
SET PAGESIZE 0
SET COLSEP ''
spool 'D:\public\cvs_txPCG.txt'
select /*csv*/
pcg from temptx;
spool off;
输出
"PCG"
"76259737020150320000504281565213310052440093515652109.2909.290101"
"19519905620160502000504283153419040044861008644759203.3903.390101"
"49424051620160220000504284594314590009220713032964404.3804.380202"
"88761197020151025000504284594315180036700812132964401.9901.990101"
如果双引号是数据的一部分,您可以使用 trim() 函数将其删除。
select /*csv*/
trim(both '"' from pcg) as pcg from temptx;
trim 函数的 Oracle 文档: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions199.htm
您无法使用 /*csv*/
指令删除 double-quotes。现在稍微更方便的方法是使用 sqlformat
命令,但即使使用 sqlformat delimited
you have to have the string enclosed.
无论如何,对单个列使用 CSV 格式似乎毫无意义,除非您的字符串中有您想要转义的分隔符。如果您真的要导出那一列并且没有分隔符,那么只需省略 /*csv*/
指令即可。如果您有多个可能包含定界符的列或字符串,那么在 Excel 或其他一些外部工具中打开时,附件可用于阻止这些定界符被误解。
如果您真的想要不带附件的 CSV 格式,您可以通过将列与逗号文字连接来手动构建输出,这仍然允许您假脱机到文件:
select pcg ||','|| some_other_col ||','|| etc from ...
或者您可以 运行 使用 运行 语句 (Ctrl-Enter) 进行查询,然后从数据网格中导出结果,从 [=36] 时出现的上下文菜单=] 在输出上。当您导出并选择 CSV 或分隔格式时,您可以选择是否包含 header 以及要使用的分隔符和附件 - 您可以选择 'none'。如果您不想在每次导出时都设置它,您可以将其设置为默认值,从 Tools->Preferences:
您不能使用 /*csv*/
指令或 sqlformat csv
执行此操作。
我知道它太旧了,但今天我的搜索得到了答案,只需使用
set markup csv on quote off
select 1 id, 'Venkat' name from dual;
输出将是
ID,NAME
1,Venkat
没想到其他任何 SET 命令