我有一個數據庫表events
,它有一個列dates
存儲日期的陣列,這樣的Sql「其中」比較日期的陣列 - 導軌
eg: ["2017-05-19","2018-04-19","2005-04-19","2017-06-19","2015-04-9"]
說我在給定的月份值,05
。我應該比較dates
列中每個事件的月份日期以及所有事件的返回列表,其日期中包含的月份恰好爲05
。 因此,如果event1和event2在日期數組中有月份05,則返回event1和event2。
我試過這個,弄糊塗了。
where("dates @> ARRAY[?]::varchar[]", don't_know_what_to_give_here)
在手機這樣只能給意見。如果沒有人迴應,我會在稍後做完整的回答。基本上,您需要使用strptime方法將字符串日期轉換爲實際日期,然後您可以檢查匹配的月份。 Strptime doc在這裏:(https://apidock.com/ruby/DateTime/strptime/class) – bkunzi01
感謝您的回覆,是的,我們應該使用strptime然後比較..但我們應該通過給定數組中的所有日期來處理事件,並以類似的方式檢查所有事件。但我仍然困惑於這樣做。 –
我建議考慮在將來爲每個具有多個日期等的事件製作一個單獨的event_dates表。但是對於這種情況,由於活動記錄,您可以像處理任何其他數組集合一樣處理psql數組。但是,您不想實例化每個對象,並且只需檢查日期就可以遍歷表中的每個事件。因此,我建議使用'pluck'來獲取所有日期和記錄ID,以便您可以使用正則表達式掃描日期數組,然後將相應的ID添加到其自己的數組中。然後加載ID的數組:@events = Event.where(id:[ids_with_matching_months]) – bkunzi01