暂无图片
oracle sql_to_csv 的方式导出到csv,能不能添加where过滤条件?
我来答
分享
暂无图片 匿名用户
oracle sql_to_csv 的方式导出到csv,能不能添加where过滤条件?

oracle sql_to_csv 的方式导出到csv,能不能添加where过滤条件?


比如,我要导出的内容为:

select A,B,C,D FROM TABLE WHERE t.day >='20210813' and t.day <='20211012';


可不可以:

begin
sql_to_csv('select A,B,C,D FROM TABLE WHERE t.day >='20210813' and t.day <='20211012';','CSV_OUT_PATH','test01.csv');
end;
/

我执行报错,感觉是转义有问题,但不知道如何转义,大佬求助下

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
JiekeXu
暂无图片

当然可以转义了,只是你的 where 条件中的时间需要用 to_date 函数转一下

to_date('20210813','yyyymmdd')


WHERE t.day >=to_date('20210813','yyyymmdd') and t.day <=to_date('20211012','yyyymmdd');

暂无图片 评论
暂无图片 有用 1
佳佳
2021-10-15
begin sql_to_csv('select count(*) FROM A t WHERE t.day \>=to_date('20210913','yyyymmdd') and t.day \<=to_date('20211012','yyyymmdd')','CSV_OUT_PATH','test01.csv'); end; / 那就是这样的,还是报错,感觉还是转义有问题
DarkAthena

sql字符串中存在单引号的转义方式常用的有两种,

一种是内部的单引号翻倍,

begin
sql_to_csv('select A,B,C,D FROM TABLE WHERE t.day >=''20210813'' and t.day <=''20211012'';','CSV_OUT_PATH','test01.csv');
end;
/

另一种是使用 q'{}' 的方式把字符串包起来

begin
sql_to_csv(q'{select A,B,C,D FROM TABLE WHERE t.day >='20210813' and t.day <='20211012';}','CSV_OUT_PATH','test01.csv');
end;
/

另外,你这个sql_to_csv非oracle自带,所以我不确定是不是sql里要包含分号,如果上面的方式不行,就把分号去掉

暂无图片 评论
暂无图片 有用 0
佳佳
2021-10-15
感谢,你的第一种方法,是可以的!第二种方法好像不太行。
Uncopyrightable

可以试下sqlplus下的方式,看看差异后调整下sql_to_csv;

set echo off
set feedback off
set linesize 100
set pagesize 0
set sqlprompt ''
set trimspool on
spool data.csv
select A,B,C,D FROM TABLE WHERE t.day >=''20210813'' and t.day <=''20211012'';
spool off
exit

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏