我正在将 Oracle 表中的一些值假脱机到 .csv 文件。每个值必须用分号分隔。我从中检索数据的查询如下所示:
select TEST1|| ';' ||
to_char(BATCH_DATE,'DD/MM/YYYY')|| ';' ||
to_char(START_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'||
to_char(END_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'||
INPUT
from TEST_TABLE
where to_char(BATCH_DATE,'YYYYMM') = to_char(sysdate,'YYYYMM')-1
and TEST1='ENGLISH'
order by TEST1,BATCH_DATE desc;
虽然这很神奇,但我还想在 INPUT 末尾有一个分号。
我期望(并尝试过)这样的事情:
select TEST1|| ';' ||
to_char(BATCH_DATE,'DD/MM/YYYY')|| ';' ||
to_char(START_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'||
to_char(END_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'||
INPUT || ';'||
from TEST_TABLE
where to_char(BATCH_DATE,'YYYYMM') = to_char(sysdate,'YYYYMM')-1
and TEST1='ENGLISH'
order by TEST1,BATCH_DATE desc;
但是它不起作用,它给出了ORA-00936:缺少表达式。
最佳答案
您的选择列表末尾有一个冗余连接运算符 (||
):
select TEST1|| ';' ||
to_char(BATCH_DATE,'DD/MM/YYYY')|| ';' ||
to_char(START_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'||
to_char(END_TIME,'DD/MM/YYYY HH24:MI:SS') || ';'||
INPUT || ';'
-- || removed ^
from TEST_TABLE
where to_char(BATCH_DATE,'YYYYMM') = to_char(sysdate,'YYYYMM')-1
and TEST1='ENGLISH'
order by TEST1,BATCH_DATE desc;
顺便说一句,您没有提到如何进行假脱机,但如果您使用 SQL*Plus,您可以只设置列分隔符,而不必搞乱连接:
-- separate columns with a semicolon
set colsep ;
spool myfile.csv
-- Straight forward query, no concatination required:
select TEST1,
to_char(BATCH_DATE, 'DD/MM/YYYY')
to_char(START_TIME, 'DD/MM/YYYY HH24:MI:SS')
to_char(END_TIME, 'DD/MM/YYYY HH24:MI:SS')
input
from TEST_TABLE
where to_char(BATCH_DATE, 'YYYYMM') = to_char(sysdate, 'YYYYMM') - 1 and
TEST1='ENGLISH'
order by TEST1, BATCH_DATE desc;
spool off
关于sql - 甲骨文 |查询输出以分号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46297290/