我正在尝试从 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'
所以我想我想做的是将一个列表传递给 where 子句,而不是显式的 :dates# 变量。例如,一个人可以使用参数“2012-01-04 12:00、2012-02-04 12:00、2012-03-04 12:00”运行脚本,或者只使用两个参数或一个参数。在三个的情况下,字符串将被解析为“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),但我不确定如何进行连接。我尝试过的各种解决方案产生了许多错误,包括:
无法将类型文本 [] 转换为没有时区的时间戳
无法将类型记录转换为没有时区的时间戳
regexp_split 不支持全局选项
WHERE 的参数不能返回一个集合
最后一个尤其令人沮丧,我很茫然,希望有任何意见。有一种更简单的方法可以做到这一点,不是吗?谢谢!