在Postgres分周间隔一段时间

时间:2009-09-04 08:47:41

标签: sql postgresql date split range

这是另一个关于日期的SQL问题......

我正在使用PHP和Postgres构建一个日历应用程序,它将显示跨越数天,数周或可能数月的事件。每个事件都有一个开始日期和结束日期,按范围选择它们不是问题;但是,如果Postgres可以在每周的第一天分割多周活动,那对我来说会很有用。我被告知可以使用GROUP BYEXTRACT来完成,但我对SQL的理解不够好。

问题是:这可以做到,精确查询会是什么样子?目前我正在使用SELECT * FROM events WHERE (range) OVERLAPS (range);然后在PHP中进行拆分,但它显然不是最佳的。

2 个答案:

答案 0 :(得分:3)

您可以使用Postgres功能generate_series。在8.3及更早版本中,执行

之类的操作
select current_date + s.a as dates from generate_series(0,14,7) as s(a);

在8.4中,您也可以

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
                              '2008-03-04 12:00', '10 hours');

答案 1 :(得分:1)

首先 - 显示您希望我们帮助您的查询的一些示例输入和输出会很好 - 例如,我并不真正得到您需要的内容。

另外 - 你可能会发现OVERLAPS不是最理想的,因为它不可索引。相反,您可能希望使用我在this blog post中描述的方法。