使用自定义文件名路径复制csv

时间:2013-12-17 14:36:48

标签: sql windows postgresql csv plpgsql

尝试使用COPY函数将查询导出为CSV时,我遇到了一些问题。

如果TO上未使用自定义文件名,则COPY运行正常并成功导出查询。

问题与在创建的文件名中添加“datestamp”(有点)有关。

declare var1 varchar(25);
DECLARE STATEMENT TEXT;
select into var1 current_date -1;
STATEMENT := 'COPY (SELECT * from myTable) To ''E'C:\\Exports\\export_'||var1||'.csv' ''With CSV';
EXECUTE STATEMENT;

在这种情况下,var1会获得类似2013-12-16的值,我需要将其添加到文件名中以获取export_2012-12-16.csv

我假设'放错地方了。我尝试了几种没有成功的组合,当然错误是ERROR: syntax error at or near "C"

1 个答案:

答案 0 :(得分:1)

plpgsql代码可以这样工作:

...
DECLARE
   var1 text;
BEGIN
var1 := to_char(current_date - 1, 'YYYY-MM-DD');
EXECUTE $$COPY (SELECT * from myTable)
          TO E'C:\\Exports\\export_$$ || var1 || $$.csv' WITH CSV$$;
...

你的报价纠缠不清。使用dollar-quoting来简化。请注意,SO上的语法突出显示具有误导性,因为它不理解美元引用。

DECLARE只需要一次(虽然不是错误)。另外,BEGIN丢失了。

to_char()使日期的文本表示独立于语言环境。