Re: BUG #18348: Inconsistency with EXTRACT([field] from INTERVAL);

Bruce Momjian <bruce@momjian.us>

From: Bruce Momjian <bruce@momjian.us>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: jian he <jian.universality@gmail.com>, Francisco Olarte <folarte@peoplecall.com>, Michael Bondarenko <work.michael.2956@gmail.com>, pgsql-bugs@lists.postgresql.org, dgrowleyml@gmail.com, Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Date: 2024-08-16T16:15:58Z
Lists: pgsql-bugs, pgsql-hackers
On Fri, Aug 16, 2024 at 12:06:35PM -0400, Tom Lane wrote:
> regression=# select n, extract(quarter from interval '1 mon' * n) from generate_series(-12,12) n;
>   n  | extract 
> -----+---------
>  -12 |       1
>  -11 |      -2
>  -10 |      -2
>   -9 |      -2

Wow, that "1" is weird to see.

> which is fine on the positive side but it's hard to describe the
> results for negative months as anything but wacko.  The v2 patch
> gives
> 
> regression=# select n, extract(quarter from interval '1 mon' * n) from generate_series(-12,12) n;
>   n  | extract 
> -----+---------
>  -12 |      -1
>  -11 |      -4
>  -10 |      -4
>   -9 |      -4
>   -8 |      -3
>   -7 |      -3
>   -6 |      -3
>   -5 |      -2
>   -4 |      -2
>   -3 |      -2
>   -2 |      -1
>   -1 |      -1
>    0 |       1
>    1 |       1
>    2 |       1
>    3 |       2
>    4 |       2
>    5 |       2
>    6 |       3
>    7 |       3
>    8 |       3
>    9 |       4
>   10 |       4
>   11 |       4
>   12 |       1
> (25 rows)
> 
> which is a whole lot saner.  So let's run with v2.

Yes, that v2 output looks very clean.  I had to really dig my head into
this so I am not surprised it was confusing to find the right solution.

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  Only you can decide what is important to you.



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix extraction of week and quarter fields from intervals.

  2. Doc: improve explanation of type interval, especially extract().