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

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: jian he <jian.universality@gmail.com>
Cc: 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-07-08T17:03:28Z
Lists: pgsql-bugs, pgsql-hackers

Attachments

I took another look at this issue and got annoyed by the fact that the
proposed coding for "quarter" still doesn't satisfy the rule that
the output for a negative interval should be the negative of the
output for the sign-reversed interval.  Specifically, if the month
field is zero, the v2 patch always emits 1:

regression=# select extract(quarter from interval '1 day');
 extract 
---------
       1
(1 row)

regression=# select extract(quarter from interval '-1 day');
 extract 
---------
       1
(1 row)

We could fix that by examining the sign of the lower-order fields
when month is zero, as in the v3 patch attached.  However, I'm not
at all sure this is really better than v2.  Notably, it makes the
documentation's statement that the result is "the month field
divided by 3 plus 1" even more incomplete.  I still don't really
want to go into details about the behavior for negative intervals.
OTOH if we did do that, I'd rather write a blanket statement
about the result being the negative of the result for a positive
interval.

Thoughts?

			regards, tom lane

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().