Mysteries of the future

Поиск
Список
Период
Сортировка
Искать

Mysteries of the future

От:
PG Doc comments form <noreply@postgresql.org>
Дата:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/16/functions-formatting.html
Description:

I'm not sure that there will be 31 days in 11 months; although postgresql
probably knows better what will happen in 20000 

For example (with the year 20000): to_date('200001131', 'YYYYMMDD') will be
interpreted as a 4-digit year; instead use a non-digit separator after the
year, like to_date('20000-1131', 'YYYY-MMDD') or to_date('20000Nov31',
'YYYYMonDD').

https://www.postgresql.org/docs/current/functions-formatting.html

```sql
SELECT to_date('20000-1131', 'YYYY-MMDD');

ERROR:  22008: date/time field value out of range: "20000-1131"
LOCATION:  DateTimeParseError, datetime.c:4021
```

Re: Mysteries of the future

От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
PG Doc comments form  writes:
> SELECT to_date('20000-1131', 'YYYY-MMDD');
> ERROR:  22008: date/time field value out of range: "20000-1131"

What exactly do you find wrong with that?  November doesn't have
31 days.

Sure, we could have a discussion about the probability of the
Gregorian calendar still being in use 18000 years from now,
but it doesn't seem very profitable.  What else do you want
to use?

			regards, tom lane


Re: Mysteries of the future

От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
"David G. Johnston"  writes:
> The request is to fix our documentation to use a valid date for the example
> in the paragraph that describes the separator requirement for years greater
> than 4 digits.

Oh!  Got it, that should be fixed.

			regards, tom lane


Re: Mysteries of the future

От:
"David G. Johnston" <david.g.johnston@gmail.com>
Дата:
On Thu, Apr 11, 2024 at 7:20 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
PG Doc comments form <noreply@postgresql.org> writes:
> SELECT to_date('20000-1131', 'YYYY-MMDD');
> ERROR:  22008: date/time field value out of range: "20000-1131"

What exactly do you find wrong with that?  November doesn't have
31 days.

Sure, we could have a discussion about the probability of the
Gregorian calendar still being in use 18000 years from now,
but it doesn't seem very profitable.  What else do you want
to use?

The request is to fix our documentation to use a valid date for the example in the paragraph that describes the separator requirement for years greater than 4 digits.

In to_timestamp and to_date, the YYYY conversion has a restriction when processing years with more than 4 digits. You must use some non-digit character or template after YYYY, otherwise the year is always interpreted as 4 digits. For example (with the year 20000): to_date('200001131', 'YYYYMMDD') will be interpreted as a 4-digit year; instead use a non-digit separator after the year, like to_date('20000-1131', 'YYYY-MMDD') or to_date('20000Nov31', 'YYYYMonDD').

David J.

FAQ