SQL から .csv にエクスポートしようとしていますが、特定の数の引数を受け入れるようにハードコーディングすると機能します。問題は、ユーザーが任意の数の引数を要求し、それらを where 句に渡せるようにしたいということです。コードはこれをもう少し明確にする必要があります。
create temporary table bdates as
select tt.date, tt.time, tt.location
from birthdays as bd
inner join days as d
on (d.id = bd.birth_id)
inner join total_time as tt
on (bd.date = tt.date and
bd.time = tt.time and
d.day_of = tt.location)
where tt.date in(:date1, :date2) --defined by user at command line
order by...
\copy bdates to '.csv'
だから私がやりたいと思うのは、明示的な :dates# 変数の代わりにその where 句にリストを渡すことです。たとえば、「2012-01-04 12:00, 2012-02-04 12:00, 2012-03-04 12:00」という引数を指定してスクリプトを実行することも、2 つまたは 1 つの引数のみを指定してスクリプトを実行することもできます。3 つの場合、文字列は '2012-01-04 12:00'、'2012-02-04 12:00'、'2012-03-04 12:00' に解析されます。
string_to_array()、unnest(regexp_matches(:dates, expression))、および regexp_split_to_table(:dates, expression) を試しましたが、結合の方法はわかりません。私が試したさまざまな解決策では、次のような多数のエラーが発生しました。
タイプ text[] をタイムゾーンなしでタイムスタンプにキャストすることはできません
タイプ レコードをタイム ゾーンなしでタイムスタンプにキャストすることはできません
regexp_split はグローバル オプションをサポートしていません
WHERE の引数はセットを返してはなりません
最後のものは特にがっかりします。私は途方に暮れており、何か意見をいただければ幸いです。これを行う簡単な方法がありますね。ありがとう!