pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Luis Sousa <llsousa@ualg.pt>
To: Alexander M. Pravking <fduch@antar.bryansk.ru>
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: Tue, 20 Jul 2004 09:17:15 +0100
Message-ID: <40FCD50B.40509@ualg.pt> (raw)
In-Reply-To: <20040719104646.GH81997@dyatel.antar.bryansk.ru>
References: <20040716115215.29699.qmail@web41010.mail.yahoo.com>
	<20678.1089988447@sss.pgh.pa.us>
	<40FB8DC2.1080405@ualg.pt>
	<20040719104646.GH81997@dyatel.antar.bryansk.ru>

Yes, that's a much more clever solution than the one I used.
Thanks

Best regards,
Luis Sousa

Alexander M. Pravking wrote:

>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
>>>      
>>>
>
>  
>



view thread (6+ messages)

Message-ID: <40FCD50B.40509@ualg.pt>
Permalink:  ../40FCD50B.40509@ualg.pt/
Also on:    postgresql.org/message-id/40FCD50B.40509@ualg.pt

 · 

reply

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: llsousa@ualg.pt, fduch@antar.bryansk.ru, tgl@sss.pgh.pa.us, tedpet5@yahoo.com
  Subject: Re: Problem in age on a dates interval
  In-Reply-To: <40FCD50B.40509@ualg.pt>

* 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