我想從SQL導出到.csv,它的工作原理是,如果我硬編碼它接受一定數量的參數。事情是,我想讓用戶請求任意數量的參數,並將它們傳遞給where子句。代碼應該使這個更清晰一點。傳遞一個列表到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子句而不是顯式的:日期#變量。例如,一個人可以使用參數'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(:日期,表達式))和regexp_split_to_table(:日期,表達式),但我不知道如何做連接。我已經嘗試了各種解決方案已經產生了許多錯誤,包括:
不能投類型的文本[]沒有時區時間戳
不能投射式記錄的時間戳沒有時區
regexp_split不支持全局選項
的WHERE不能返回一套
最後一個參數是特別令人沮喪,我很茫然,並希望任何輸入。有一個更簡單的方法來做到這一點,不是嗎?謝謝!
你不需要正則表達式,只需在字符串周圍放一個大括號,然後將它轉換爲'timestamp []'數組 –
並且不能使用IN作爲數組。你必須使用平等和任何。 'WHERE expr = ANY(arrayHere)' –