2013-12-17 57 views
2

我在嘗試使用COPY函數將查詢導出爲CSV時遇到一些問題。使用自定義文件名路徑COPY csv

如果不使用TO上的自定義文件名,COPY運行正常併成功導出查詢。

該問題與爲所創建的文件名添加「datestamp」(kinda)有關。

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

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來簡化。請注意,這裏的語法突出顯示是誤導性的,因爲它不理解美元報價。

DECLARE只需要一次(雖然不是一個錯誤)。另外,BEGIN失蹤。

to_char()使獨立於語言環境的日期的文本表示。

+0

工作!謝謝 – Luke

相關問題