Fix EXTRACT(ISOYEAR FROM timestamp) for years BC.
The test cases added by commit 26ae3aa80 exposed an old oversight in timestamp[tz]_part: they didn't correct the result of date2isoyear() for BC years, so that we produced an off-by-one answer for such years. Fix that, and back-patch to all supported branches. Discussion: https://postgr.es/m/SG2PR06MB37762CAE45DB0F6CA7001EA9B6550@SG2PR06MB3776.apcprd06.prod.outlook.com
This commit is contained in:
parent
7d233810a3
commit
332584da9c
@ -4265,6 +4265,7 @@ date2isoweek(int year, int mon, int mday)
|
|||||||
/* date2isoyear()
|
/* date2isoyear()
|
||||||
*
|
*
|
||||||
* Returns ISO 8601 year number.
|
* Returns ISO 8601 year number.
|
||||||
|
* Note: zero or negative results follow the year-zero-exists convention.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
date2isoyear(int year, int mon, int mday)
|
date2isoyear(int year, int mon, int mday)
|
||||||
@ -4539,6 +4540,9 @@ timestamp_part(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
case DTK_ISOYEAR:
|
case DTK_ISOYEAR:
|
||||||
result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday);
|
result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday);
|
||||||
|
/* Adjust BC years */
|
||||||
|
if (result <= 0)
|
||||||
|
result -= 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DTK_DOW:
|
case DTK_DOW:
|
||||||
@ -4735,6 +4739,9 @@ timestamptz_part(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
case DTK_ISOYEAR:
|
case DTK_ISOYEAR:
|
||||||
result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday);
|
result = date2isoyear(tm->tm_year, tm->tm_mon, tm->tm_mday);
|
||||||
|
/* Adjust BC years */
|
||||||
|
if (result <= 0)
|
||||||
|
result -= 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DTK_DOW:
|
case DTK_DOW:
|
||||||
|
@ -822,7 +822,7 @@ SELECT d1 as "timestamp",
|
|||||||
Fri Feb 14 17:32:01 1997 | 1997 | 7 | 5 | 5 | 45
|
Fri Feb 14 17:32:01 1997 | 1997 | 7 | 5 | 5 | 45
|
||||||
Sat Feb 15 17:32:01 1997 | 1997 | 7 | 6 | 6 | 46
|
Sat Feb 15 17:32:01 1997 | 1997 | 7 | 6 | 6 | 46
|
||||||
Sun Feb 16 17:32:01 1997 | 1997 | 7 | 7 | 0 | 47
|
Sun Feb 16 17:32:01 1997 | 1997 | 7 | 7 | 0 | 47
|
||||||
Tue Feb 16 17:32:01 0097 BC | -96 | 7 | 2 | 2 | 47
|
Tue Feb 16 17:32:01 0097 BC | -97 | 7 | 2 | 2 | 47
|
||||||
Sat Feb 16 17:32:01 0097 | 97 | 7 | 6 | 6 | 47
|
Sat Feb 16 17:32:01 0097 | 97 | 7 | 6 | 6 | 47
|
||||||
Thu Feb 16 17:32:01 0597 | 597 | 7 | 4 | 4 | 47
|
Thu Feb 16 17:32:01 0597 | 597 | 7 | 4 | 4 | 47
|
||||||
Tue Feb 16 17:32:01 1097 | 1097 | 7 | 2 | 2 | 47
|
Tue Feb 16 17:32:01 1097 | 1097 | 7 | 2 | 2 | 47
|
||||||
|
@ -913,7 +913,7 @@ SELECT d1 as timestamptz,
|
|||||||
Fri Feb 14 17:32:01 1997 PST | 1997 | 7 | 5 | 5 | 45
|
Fri Feb 14 17:32:01 1997 PST | 1997 | 7 | 5 | 5 | 45
|
||||||
Sat Feb 15 17:32:01 1997 PST | 1997 | 7 | 6 | 6 | 46
|
Sat Feb 15 17:32:01 1997 PST | 1997 | 7 | 6 | 6 | 46
|
||||||
Sun Feb 16 17:32:01 1997 PST | 1997 | 7 | 7 | 0 | 47
|
Sun Feb 16 17:32:01 1997 PST | 1997 | 7 | 7 | 0 | 47
|
||||||
Tue Feb 16 17:32:01 0097 PST BC | -96 | 7 | 2 | 2 | 47
|
Tue Feb 16 17:32:01 0097 PST BC | -97 | 7 | 2 | 2 | 47
|
||||||
Sat Feb 16 17:32:01 0097 PST | 97 | 7 | 6 | 6 | 47
|
Sat Feb 16 17:32:01 0097 PST | 97 | 7 | 6 | 6 | 47
|
||||||
Thu Feb 16 17:32:01 0597 PST | 597 | 7 | 4 | 4 | 47
|
Thu Feb 16 17:32:01 0597 PST | 597 | 7 | 4 | 4 | 47
|
||||||
Tue Feb 16 17:32:01 1097 PST | 1097 | 7 | 2 | 2 | 47
|
Tue Feb 16 17:32:01 1097 PST | 1097 | 7 | 2 | 2 | 47
|
||||||
|
Loading…
x
Reference in New Issue
Block a user