On Tue, 3 May 2005, Flavio S. Glock wrote:
How about using a "view" to create a "lazy" sql recurrence.
For example: "FREQ=YEARLY;BYMONTH=3,6"
--- postgresql --- CREATE TABLE YEARS ( N DATE UNIQUE PRIMARY KEY ); insert into years values ( date('1990-01-01') ); insert into years values ( date('1991-01-01') ); insert into years values ( date('1992-01-01') ); CREATE VIEW RECURR AS select ( n + interval '2 month' ) from years union select ( n + interval '5 month' ) from years; ----
The sql statements could be generated automatically using a DateTime::Format module.
That still won't handle "1st Sunday of the month" all that easily, as that's a more complex calculation.
It is not too difficult, actually:
CREATE VIEW MONTHS ( n ) AS select ( n + interval '2 month' ) from years union select ( n + interval '5 month' ) from years;
CREATE VIEW FIRST_WEEK_OF_MONTH ( n ) AS select ( n ) from MONTHS union select ( n + interval '1 day' ) from MONTHS union select ( n + interval '2 day' ) from MONTHS union select ( n + interval '3 day' ) from MONTHS union select ( n + interval '4 day' ) from MONTHS union select ( n + interval '5 day' ) from MONTHS union select ( n + interval '6 day' ) from MONTHS;
CREATE VIEW FIRST_SUNDAY AS select ( n ) from FIRST_WEEK_OF_MONTH where EXTRACT(DOW FROM n) = 0;
select * from FIRST_SUNDAY; n --------------------- 1990-03-04 00:00:00 1990-06-03 00:00:00 1991-03-03 00:00:00 1991-06-02 00:00:00 1992-03-01 00:00:00 1992-06-07 00:00:00 (6 registros)
- Flavio S. Glock