Here goes a yet another SQL question about dates…
I'm building a calendaring application using PHP and Postgres that would display events spanning days, weeks or possibly months. Each event has a start date and an end date, and selecting them by range is not a problem; however, it would be useful for me if Postgres could split multi-week events at the first day of each week. I've been told it can be done using GROUP BY
and EXTRACT
, but I'm not good enough with SQL to understand how.
The question is: can this be done, and what would the precise query look like? Currently I'm using SELECT * FROM events WHERE (range) OVERLAPS (range)
; and then doing the splitting in PHP, but it's clearly not optimal.
You can use the Postgres function generate_series. In 8.3 and earlier, do things like
In 8.4, you can also do
First of all - it would be good to show some sample input and output of the query you'd like us to help you with - I, for example, don't really get what it is that you need.
Also - you might find OVERLAPS to be suboptimal, as it's not indexable. Instead you might want to use the method I described in this blog post.