Re: date_part returns different results with same interval. - Mailing list pgsql-bugs

From Wade Klaver
Subject Re: date_part returns different results with same interval.
Date
Msg-id 200402201412.29522.archeron@wavefire.com
Whole thread Raw
In response to Re: date_part returns different results with same interval.  (Bruno Wolff III <bruno@wolff.to>)
Responses Re: date_part returns different results with same interval.  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
Hello again,
  Should an interval not be arbitrary?  The portion of the information one
requests should not depend on the representation.  I guess what I am trying
to say is that the date_part() call is how you determine what you are
asking...  If I want to get the number of years, it shouldn't matter if my
interval is '1 year, 1 month' or '396 days', they both contain 1 year.  If
the answer changes depending on the representation of two otherwise-identical
intervals, this can introduce all kinds of errors into program logic.  It
just doesn't make a lot of sense unless I am missing something here.
 -Wade

On February 20, 2004 05:47, Bruno Wolff III wrote:
> On Thu, Feb 19, 2004 at 16:52:37 -0800,
>
>   Wade Klaver <archeron@wavefire.com> wrote:
> > Hello folks.
> >
> > I just noticed some funky behaviour on the part of date_part.  If there
> > is some reason this is correct behaviour, I wouldn't mind knowing why.
> > The problem is that date_part can return different results given to
> > essentially identical intervals.  It seems to maybe be obeying the letter
> > of the law if not the spirit? The following session from a -CURRENT build
> > demonstrates this.
>
> Intervals have two parts. One is an absolute time difference (I think
> stored in seconds), that should be used for getting days, hours, minutes
> and seconds. The other part is a difference in months that is used
> for getting months and years.
>
> Under some circumstances months get converted to 30 days each.
>
> It seems reasonable that date_part keeps these parts separate as it
> allows a way to look at each part of the interval. I don't know
> if there is another function that allows you to do that.
>
> > Thanks in advance.
> >
> > wade=# select age(now(), 'Jan 1, 2002'::date);
> >                     age
> > -------------------------------------------
> >  2 years 1 mon 18 days 16:24:54.4191970001
> > (1 row)
> >
> > wade=# select date_part( 'years', age(now(), 'Jan 1, 2002'::date));
> >  date_part
> > -----------
> >          2
> > (1 row)
> >
> > wade=# select now() - 'Jan 1, 2002'::date;
> >            ?column?
> > ------------------------------
> >  779 days 16:25:03.9250539988
> > (1 row)
> >
> > wade=# select date_part( 'years', now() - 'Jan 1, 2002'::date);
> >  date_part
> > -----------
> >          0
> > (1 row)
> >
> >
> > --
> > Wade Klaver
> > Wavefire Technologies Corporation
> > GPG Public Key at http://archeron.wavefire.com
> >
> > /"\   ASCII Ribbon Campaign  .
> > \ / - NO HTML/RTF in e-mail  .
> >  X  - NO Word docs in e-mail .
> > / \ -----------------------------------------------------------------
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 2: you can get off all lists at once with the unregister command
> >     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

--
Wade Klaver
Wavefire Technologies Corporation
GPG Public Key at http://archeron.wavefire.com

/"\   ASCII Ribbon Campaign  .
\ / - NO HTML/RTF in e-mail  .
 X  - NO Word docs in e-mail .
/ \ -----------------------------------------------------------------

pgsql-bugs by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Maybe a bug found with nextval() function
Next
From: Bruce Momjian
Date:
Subject: Re: BUG #1081: Spelling error in tsearch2.sql leading to problems