Re: Have I found an interval arithmetic bug?

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Bryn Llewellyn <bryn(at)yugabyte(dot)com>
Cc: pgsql-general list <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Have I found an interval arithmetic bug?
Date: 2021-04-02 18:06:04
Message-ID: 20210402180604.GG9270@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers


Thread moved to hackers, with a patch.

---------------------------------------------------------------------------

On Thu, Apr 1, 2021 at 09:46:58PM -0700, Bryn Llewellyn wrote:
> Or am I misunderstanding something?
>
> Try this. The result of each “select” is shown as the trailing comment on the
> same line. I added whitespace by hand to line up the fields.
>
> select interval '-1.7 years'; -- -1 years -8 mons
>
> select interval '29.4 months'; -- 2 years 5 mons 12
> days
>
> select interval '-1.7 years 29.4 months'; -- 8 mons 12
> days << wrong
> select interval '29.4 months -1.7 years'; -- 9 mons 12
> days
>
> select interval '-1.7 years' + interval '29.4 months'; -- 9 mons 12
> days
> select interval '29.4 months' + interval '-1.7 years'; -- 9 mons 12
> days
>
> As I reason it, the last four “select” statements are all semantically the
> same. They’re just different syntaxes to add the two intervals the the first
> two “select” statements use separately. There’s one odd man out. And I reason
> this one to be wrong. Is there a flaw in my reasoning?
>
> Further… there’s a notable asymmetry. The fractional part of “1.7 years” is 8.4
> months. But the fractional part of the months value doesn’t spread further down
> into days. However, the fractional part of “29.4 months” (12 days) _does_
> spread further down into days. What’s the rationale for this asymmetry?
>
> I can’t see that my observations here can be explained by the difference
> between calendar time and clock time. Here I’m just working with non-metric
> units like feet and inches. One year is just defined as 12 months. And one
> month is just defined as 30 days. All that stuff about adding a month to
> 3-Feb-2020 taking you to 3-Mar-2020 (same for leap years an non-leap years) ,
> and that other stuff about adding one day to 23:00 on the day before the
> “spring forward” moment taking you to 23:00 on the next day (i.w. when
> intervals are added to timestamps) is downstream of simply adding two
> intervals.
>

--
Bruce Momjian <bruce(at)momjian(dot)us> https://momjian.us
EDB https://enterprisedb.com

If only the physical world exists, free will is an illusion.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Bryn Llewellyn 2021-04-02 20:05:42 Re: Have I found an interval arithmetic bug?
Previous Message Bruce Momjian 2021-04-02 18:05:49 Re: Have I found an interval arithmetic bug?

Browse pgsql-hackers by date

  From Date Subject
Next Message David Steele 2021-04-02 18:09:21 Re: invalid data in file backup_label problem on windows
Previous Message Bruce Momjian 2021-04-02 18:05:49 Re: Have I found an interval arithmetic bug?