Received: from maia.hub.org (maia-2.hub.org [200.46.204.251]) by mail.postgresql.org (Postfix) with ESMTP id 2D700634265 for ; Thu, 27 May 2010 07:43:53 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.251]) (amavisd-maia, port 10024) with ESMTP id 51792-08 for ; Thu, 27 May 2010 10:43:44 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by mail.postgresql.org (Postfix) with ESMTP id A6DF8634249 for ; Thu, 27 May 2010 07:43:45 -0300 (ADT) Received: from webserv.wug.de ([194.25.154.138]) by mrelayeu.kundenserver.de (node=mrbap2) with ESMTP (Nemesis) id 0LhDFP-1NU0Kt3ZY7-00nhNc; Thu, 27 May 2010 12:43:36 +0200 Received: from kretschmer by webserv.wug.de with local (Exim 3.36 #1) id 1OHaYq-00087s-00 for pgsql-sql@postgresql.org; Thu, 27 May 2010 12:43:36 +0200 Date: Thu, 27 May 2010 12:43:36 +0200 From: "A. Kretschmer" To: pgsql-sql@postgresql.org Subject: Re: Check set of date intervals Message-ID: <20100527104336.GD6907@a-kretschmer.de> References: <20100527102713.GC6907@a-kretschmer.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100527102713.GC6907@a-kretschmer.de> X-OS: Debian/GNU Linux - weil ich es mir Wert bin! User-Agent: Mutt/1.5.9i X-Provags-ID: V01U2FsdGVkX1+6R+b3yb+6MzlWifQ3O6U21EpXWc2mjn9w3PX TDIfn1dJZYSSqjgYQnbNXgvM2sw6o206Su+7IMvg+kKJanPoOk r1/drTTjtCtZPlYpW7U3A== X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.81 tagged_above=-5 required=5 tests=BAYES_50=0.8, RCVD_IN_DNSWL_NONE=-0.0001, T_FRT_CONTACT=0.01 X-Spam-Level: X-Archive-Number: 201005/124 X-Sequence-Number: 34172 In response to A. Kretschmer : > > please, suggest an idea how to implement this in SQL without writing a > > procedure. > > There are a really nice additional contrib module from Jeff Davis, > described here: > > http://thoughts.j-davis.com/2010/03/09/temporal-postgresql-roadmap/ > short example, with your data: test=# select * from rel_a; id | start_date | end_date | p ----+------------+------------+---------------------------------------------------- 1 | 01.01.2010 | 01.02.2010 | [01.01.2010 00:00:00 CET, 01.02.2010 00:00:00 CET) 2 | 03.02.2010 | 04.03.2010 | [03.02.2010 00:00:00 CET, 04.03.2010 00:00:00 CET) (2 rows) test=# select * from rel_a where contains(p, period('15.01.2010'::date, '15.02.2010'::date)); id | start_date | end_date | p ----+------------+----------+--- (0 rows) test=# select * from rel_a where contains(p, period('15.01.2010'::date, '25.01.2010'::date)); id | start_date | end_date | p ----+------------+------------+---------------------------------------------------- 1 | 01.01.2010 | 01.02.2010 | [01.01.2010 00:00:00 CET, 01.02.2010 00:00:00 CET) (1 row) The column p is created with: test=# alter table rel_a add column p period; and test=# update rel_a set p = period(start_date, end_date); Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99