diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 7a08b92..a8370d6 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -1161,7 +1161,11 @@ DecodeDateTime(char **field, int *ftype, int nf, if (dterr < 0) return dterr; } - else if (flen > 4) + /* + * should call DecodeNumberField only when anyone Date or + * Time field is not yet found. + */ + else if (flen > 4 && (!(fmask & DTK_DATE_M) || !(fmask & DTK_TIME_M))) { dterr = DecodeNumberField(flen, field[i], fmask, &tmask, tm, diff --git a/src/test/regress/expected/timestamptz.out b/src/test/regress/expected/timestamptz.out index 6581b5e..9259f0b 100644 --- a/src/test/regress/expected/timestamptz.out +++ b/src/test/regress/expected/timestamptz.out @@ -1675,3 +1675,19 @@ SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID') | 2001 1 1 1 1 1 1 (66 rows) +CREATE TABLE TIMESTAMPTZ_TST (a int , b timestamptz); +-- Test year field value with len > 4 +INSERT INTO TIMESTAMPTZ_TST VALUES(1, 'Sat Mar 11 23:58:48 1000 IST'); +INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 11 23:58:48 10000 IST'); +INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 11 23:58:48 100000 IST'); +--Verify data +SELECT * FROM TIMESTAMPTZ_TST; + a | b +---+-------------------------------- + 1 | Tue Mar 11 13:58:48 1000 PST + 2 | Sat Mar 11 13:58:48 10000 PST + 3 | Sat Mar 11 13:58:48 100000 PST +(3 rows) + +--Cleanup +DROP TABLE TIMESTAMPTZ_TST; diff --git a/src/test/regress/sql/timestamptz.sql b/src/test/regress/sql/timestamptz.sql index 863b286..b70793c 100644 --- a/src/test/regress/sql/timestamptz.sql +++ b/src/test/regress/sql/timestamptz.sql @@ -240,3 +240,14 @@ SELECT '' AS to_char_10, to_char(d1, 'IYYY IYY IY I IW IDDD ID') SELECT '' AS to_char_11, to_char(d1, 'FMIYYY FMIYY FMIY FMI FMIW FMIDDD FMID') FROM TIMESTAMPTZ_TBL; + +CREATE TABLE TIMESTAMPTZ_TST (a int , b timestamptz); + +-- Test year field value with len > 4 +INSERT INTO TIMESTAMPTZ_TST VALUES(1, 'Sat Mar 11 23:58:48 1000 IST'); +INSERT INTO TIMESTAMPTZ_TST VALUES(2, 'Sat Mar 11 23:58:48 10000 IST'); +INSERT INTO TIMESTAMPTZ_TST VALUES(3, 'Sat Mar 11 23:58:48 100000 IST'); +--Verify data +SELECT * FROM TIMESTAMPTZ_TST; +--Cleanup +DROP TABLE TIMESTAMPTZ_TST;