1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Fix make_timestamp[tz] to accept negative years as meaning BC.

Previously we threw an error.  But make_date already allowed the case,
so it is inconsistent as well as unhelpful for make_timestamp not to.

Both functions continue to reject year zero.

Code and test fixes by Peter Eisentraut, doc changes by me

Discussion: https://postgr.es/m/13c0992c-f15a-a0ca-d839-91d3efd965d9@2ndquadrant.com
This commit is contained in:
Tom Lane
2020-09-29 13:48:06 -04:00
parent a6b1f5365d
commit a094c8ff53
6 changed files with 36 additions and 9 deletions

View File

@ -8939,6 +8939,7 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
</para>
<para>
Create date from year, month and day fields
(negative years signify BC)
</para>
<para>
<literal>make_date(2013, 7, 15)</literal>
@ -9004,6 +9005,7 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
</para>
<para>
Create timestamp from year, month, day, hour, minute and seconds fields
(negative years signify BC)
</para>
<para>
<literal>make_timestamp(2013, 7, 15, 8, 15, 23.5)</literal>
@ -9027,12 +9029,18 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
</para>
<para>
Create timestamp with time zone from year, month, day, hour, minute
and seconds fields; if <parameter>timezone</parameter> is not
specified, the current time zone is used
and seconds fields (negative years signify BC).
If <parameter>timezone</parameter> is not
specified, the current time zone is used; the examples assume the
session time zone is <literal>Europe/London</literal>
</para>
<para>
<literal>make_timestamptz(2013, 7, 15, 8, 15, 23.5)</literal>
<returnvalue>2013-07-15 08:15:23.5+01</returnvalue>
</para>
<para>
<literal>make_timestamptz(2013, 7, 15, 8, 15, 23.5, 'America/New_York')</literal>
<returnvalue>2013-07-15 13:15:23.5+01</returnvalue>
</para></entry>
</row>