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

标签 sql windows postgresql csv plpgsql

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

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

此问题与向创建的文件名添加“日期戳”(有点)有关。

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"

最佳答案

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() 使日期的文本表示独立于语言环境。

关于sql - 使用自定义文件名路径复制 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20636947/

相关文章:

mysql - 具有多个条件的 SELECT GROUP

windows - 删除 CR LF 后将文件 A 复制到文件 B 的批处理文件

postgresql - Sqoop+PostgreSQL : how to prevent quotes around table name

sql - 错误: missing FROM-clause entry for table "p"

sql - 具有计数聚合函数的列表列

sql - 在 PostgreSQL 中使用行值作为列

php - PHP 中的日期/时间格式

c++ - AttachConsole 和 QProcess::readAll()

c++ - 输入法编辑器窗口为 WM_QUERYENDSESSION 返回 FALSE - 为什么?

php - 数组从 2 个不等于变量的字段中推送 1 个值