Received: from localhost (maia-1.hub.org [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id 7BD069FB7C3 for ; Wed, 4 Apr 2007 09:07:50 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.191]) (amavisd-maia, port 10024) with ESMTP id 03276-04 for ; Wed, 4 Apr 2007 09:07:41 -0300 (ADT) X-Greylist: delayed 00:06:35.221105 by SQLgrey-1.7.4 Received: from web90602.mail.mud.yahoo.com (web90602.mail.mud.yahoo.com [216.252.100.185]) by postgresql.org (Postfix) with SMTP id 9789E9FB7AB for ; Wed, 4 Apr 2007 09:07:41 -0300 (ADT) Received: (qmail 82307 invoked by uid 60001); 4 Apr 2007 12:01:00 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID; b=5RnusUf6hj23FKg+jfM7Vb4MHn2IQgiJAleLWi0oZQhxWkve3ZGRNcWs4TaaoIxS9uwlWj880s60V0eTe/PPbyqPyIj/+az/8RhwjYsRjNnA5wRkV6OaNFnFCZFKMRPbId5GDH3/cM1hY3BODZNneKtB9pN0b3iswCH1SYOfNwo=; X-YMail-OSG: NU7foN4VM1nJ5DqE8Mq0hVah5aw4iU_bPObqWeuFJJcT0HncZLtS3CgSFXQm4q53iBEASjH0WYikQl.KdoEpj8gQWd6TJwlnlsn68j0K8IJlnX89vsQnhlRF9yXfNw-- Received: from [193.227.168.171] by web90602.mail.mud.yahoo.com via HTTP; Wed, 04 Apr 2007 05:00:56 PDT Date: Wed, 4 Apr 2007 05:00:56 -0700 (PDT) From: Roger Tannous Subject: Generating dates prior to generate_series To: PostgreSQL SQL Mailing List MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Message-ID: <580286.82124.qm@web90602.mail.mud.yahoo.com> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.756 tagged_above=0 required=5 tests=BAYES_00=-2.599, DNS_FROM_RFC_ABUSE=0.2, DNS_FROM_RFC_POST=1.708, DNS_FROM_RFC_WHOIS=1.447 X-Spam-Level: X-Archive-Number: 200704/50 X-Sequence-Number: 28050 I'm using PostgreSQL version 7.3.2, and generate_series() is not available, so this is a function to generate a series dates. The function goes backwards if the second argument is less than the first one. Check the two select statements at the end. Best Regards, Roger Tannous. CREATE FUNCTION date_range(VARCHAR, VARCHAR) RETURNS SETOF DATE AS ' DECLARE dateStart ALIAS FOR $1; dateEnd ALIAS FOR $2; forwardSteps BOOLEAN := true; tmpDate DATE; BEGIN IF (to_date(dateStart, ''YYYY-mm-dd'') > to_date(dateEnd, ''YYYY-mm-dd'')) THEN forwardSteps := false; END IF; tmpDate := to_date(dateStart, ''YYYY-mm-dd''); WHILE ((forwardSteps AND tmpDate <= to_date(dateEnd, ''YYYY-mm-dd'')) OR (NOT forwardSteps AND tmpDate >= to_date(dateEnd, ''YYYY-mm-dd''))) LOOP RETURN NEXT tmpDate; IF forwardSteps THEN tmpDate := tmpDate + interval ''1 day''; ELSE tmpDate := tmpDate - interval ''1 day''; END IF; END LOOP; RETURN; END; ' LANGUAGE 'plpgsql'; select * FROM date_range('2007-01-03', '2007-03-20'); select * FROM date_range('2007-04-03', '2007-03-20'); ____________________________________________________________________________________ Looking for earth-friendly autos? Browse Top Cars by "Green Rating" at Yahoo! Autos' Green Center. http://autos.yahoo.com/green_center/