我正面临着日历的这个问题。
我必须提取所有记录(事件)(通过选择):1.特定日期,或 2.可重复日期
问题是普通日历显示整个月份(或特定时间范围),因此可以从子查询生成的子集中选择记录(并比较日期片段),即:
select (generate_series('2012-06-29 00:00:00',
'2012-07-03 00:00:00',
'5 minutes'::interval))::timestamp;
我必须构建一个日历视图,就像一个无限的事件列表,你可以向下滚动。所以我必须一个一个地显示事件。当我选择事件(即 2012-06-29 00:00:00 到 2012-10-29 00:00:00)时,语句将不考虑日期为 2012-10-30 00:00:00 的记录,这是意料之外的。
如何选择多个不连续的日期?
数据库架构:
CREATE TABLE "public"."events" (
"id" int4 DEFAULT nextval('events_id_seq'::regclass) NOT NULL,
"date" timestamp(6),
"date_repeat_interval" interval(6),
"date_repeat_start" timestamp(6),
"date_repeat_stop" timestamp(6),
"event_name" varchar(255) NOT NULL
)
WITH (OIDS=FALSE);
在特定日期插入一些常规事件:
INSERT INTO "public"."events" VALUES ('1', '2013-04-18 14:04:39', null, null, null, 'Regular 1');
INSERT INTO "public"."events" VALUES ('2', '2013-04-19 14:04:50', null, null, null, 'Regular 2');
并插入一些间隔为 1 和 2 天的事件,并指定从和到日期的重复:
INSERT INTO "public"."events" VALUES ('3', null, '1 day', '2013-04-16 14:05:26', '2013-04-19 14:05:31', 'Repeatable 1');
INSERT INTO "public"."events" VALUES ('4', null, '2 days', '2013-04-17 14:05:49', '2013-06-15 14:05:53', 'Repeatable 2');
问题:
如何查询数据库范围内的所有事件:从现在到无限,限制为 10。它们按发生顺序发生,包括重复事件的多次发生。