将SQL * Plus格式化为CSV输出格式问题

时间:2016-11-10 12:32:38

标签: csv sqlplus

我正在尝试使用列格式将我的SQL查询结果导出到.csv文件,如下所示。

SET head OFF
SET feedback OFF
SET pagesize 500
SET linesize 2000;
SET colsep ,
set trimspool on
set trimout on
set trims on

column c1 heading POSTING_DATE Format date
column c2 heading COMPANY_CODE Format a6
column c3 heading PHYSICAL_ACCOUNT Format a8
column c4 heading DEBIT_AMOUNT Format 99999.99 
column c5 heading CREDIT_AMOUNT Format 99999.99 

select  POSTING_DATE c1,
  COMPANY_CODE c2,
  PHYSICAL_ACCOUNT c3,
  DEBIT_AMOUNT c4,
  EDIT_AMOUNT c5
from abc_temp;

该报告以.csv格式完美生成,但我遇到了两个列的问题:credit_amountdebit_amount

当我在Excel中打开.csv文件并选择几个单元格时,它应该根据内置的Excel功能显示所有选定单元格的总和,计数和平均值。这不适用于这两个专栏;只显示计数

Only count is coming, average and total should also come

似乎Excel将这些视为字符串而不是数字。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这些值被视为字符串,因为默认情况下,SQL * Plus使用制表符来分隔结果,并且选项卡的存在使Excel认为它实际上是一个字符串。如果它只有空格分隔值,则该值仍将被视为数字。

您可以change the behaviour添加:

set tab off

虽然我个人倾向于使用连接构造每一行,这消除了任何空格,并明确地格式化日期(有时是数字)::

set head off
set pages 0

prompt Posting date,Company code,Physical account,Debit amount,Credit amount

select to_char(posting_date, 'YYYY-MM-DD')
  ||','|| company_code
  ||','|| physical_account
  ||','|| debit_amount
  ||','|| credit_amount
from abc_temp;