Re: BUG #14944: Error for 6 digit year in date comparision

From: Akash Bedi <abedi0501(at)gmail(dot)com>
To: Francisco Olarte <folarte(at)peoplecall(dot)com>
Cc: "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #14944: Error for 6 digit year in date comparision
Date: 2017-12-04 10:53:44
Message-ID: CALEOz1HLRHd9KJSWqVUZCED2zLeNTHVkxkNoq6oYsfOjignsow@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Thanks for the clarification.

On Mon, Dec 4, 2017 at 4:15 PM, Francisco Olarte <folarte(at)peoplecall(dot)com>
wrote:

> On Mon, Dec 4, 2017 at 10:18 AM, <abedi0501(at)gmail(dot)com> wrote:
> > I'm noticing errors during date comparison,
> > --Below works fine
> > select '99999-01-01'::date > now();
> > ?column?
> > ----------
> > t
> > (1 row)
> > --Gives error
> > select '999999-01-01'::date > now();
> > ERROR: date out of range for timestamp
> >
> > Database allows to store date ranges until 5874897 AD
> '5874897-01-01'::date
> > but date comparison fails.
>
> Seems a failure in reading comprehension, more than a bug. Notice the
> error you pasted it says "out of range FOR TIMESTAMP"
>
> When comparing dates to timestamps dates are converted to timestamp,
> the greater precision type, because otherwise you would get erroneous
> results. Not in your particular case ( as conversion to date truncates
> down ) but it would in the other sense:
>
> 2017-01-01::date < 2017-01-01 10:00:00 timestamp > true => date is
> upgraded adding 00:00:00
>
> If you convert timestmap to date it would be false ( they would be equal ).
>
> if you read https://www.postgresql.org/docs/10/static/datatype-
> datetime.html
> you'll notice year in timestamps only covers 4713 BC to 294276 AD.
>
> Cast now() to date or use current_date to avoid that:
>
> test=> select '999999-01-01'::date;
> date
> --------------
> 999999-01-01
> (1 row)
>
> test=> select '999999-01-01'::date::timestamp;
> ERROR: date out of range for timestamp
> test=> select '999999-01-01'::date > now();
> ERROR: date out of range for timestamp
> test=> select '999999-01-01'::date > now()::date;
> ?column?
> ----------
> t
> (1 row)
>
> test=> select '999999-01-01'::date > current_date, current_date;
> ?column? | date
> ----------+------------
> t | 2017-12-04
> (1 row)
>
> Francisco Olarte.
>

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Mirav T. Mehta 2017-12-04 12:22:01 Re: Postgres installation issue
Previous Message Francisco Olarte 2017-12-04 10:45:10 Re: BUG #14944: Error for 6 digit year in date comparision