Re: date_part returns different results with same interval.

From: Wade Klaver <archeron(at)wavefire(dot)com>
To: Bruno Wolff III <bruno(at)wolff(dot)to>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: date_part returns different results with same interval.
Date: 2004-02-20 22:12:29
Message-ID: 200402201412.29522.archeron@wavefire.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)wavefire(dot)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(at)postgresql(dot)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 .
/ \ -----------------------------------------------------------------

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Scott Goodwin 2004-02-21 04:34:37 Mac OS X, PostgreSQL, PL/Tcl
Previous Message Joe Sunday 2004-02-20 21:51:08 Re: Maybe a bug found with nextval() function