From: Alexander M. Pravking <fduch@antar.bryansk.ru>
To: Luis Sousa <llsousa@ualg.pt>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Theodore Petrosky <tedpet5@yahoo.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Problem in age on a dates interval
Date: Mon, 19 Jul 2004 14:46:46 +0400
Message-ID: <20040719104646.GH81997@dyatel.antar.bryansk.ru> (raw)
In-Reply-To: <40FB8DC2.1080405@ualg.pt>
References: <20040716115215.29699.qmail@web41010.mail.yahoo.com>
<20678.1089988447@sss.pgh.pa.us>
<40FB8DC2.1080405@ualg.pt>
On Mon, Jul 19, 2004 at 10:00:50AM +0100, Luis Sousa wrote:
> I worked around this problem returning the difference between the two
> dates, using extract doy from both.
> Anyway, this will cause a bug on my code when changing the year. Any ideas?
Why don't you use the minus operator?
SELECT '2004-05-14 16:00'::timestamp - '2004-02-18 16:00'::timestamp;
?column?
----------
86 days
Or, if you need the age just in days:
SELECT extract(day from '2004-05-14 16:00'::timestamp - '2004-02-18 16:00'::timestamp);
date_part
-----------
86
or
SELECT '2004-05-14 16:00'::date - '2004-02-18 16:00'::date;
?column?
----------
86
Note that '2004-05-14 16:00'::date is actually '2004-05-14 00:00'::date,
so the last two are not always equal.
> Tom Lane wrote:
>
> >Theodore Petrosky <tedpet5@yahoo.com> writes:
> >
> >
> >>wow.... at first I thought I had my head around a leap
> >>year problem so I advanced your query a year....
> >>
> >>
> >
> >I think what's going on here is a difference of interpretation about
> >whether an "M months D days" interval means to add the months first
> >or the days first. For instance
> >
> >2005-02-18 plus 2 months = 2005-04-18, plus 24 days = 2005-05-12
> >
> >2005-02-18 plus 24 days = 2005-03-14, plus 2 months = 2005-05-14
> >
> >The timestamp-plus-interval operator is evidently doing addition the
> >first way, but it looks like age() is calculating the difference in a
> >way that implicitly corresponds to the second way.
> >
> >I have some vague recollection that this has come up before, but
> >I don't recall whether we concluded that age() needs to be changed
> >or not. In any case it's not risen to the top of anyone's to-do list,
> >because I see that age() still acts this way in CVS tip.
> >
> > regards, tom lane
--
Fduch M. Pravking
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: fduch@antar.bryansk.ru, llsousa@ualg.pt, tgl@sss.pgh.pa.us, tedpet5@yahoo.com
Subject: Re: Problem in age on a dates interval
In-Reply-To: <20040719104646.GH81997@dyatel.antar.bryansk.ru>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox