]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix date_trunct for December dates that are in the next year, e.g.:
authorBruce Momjian <bruce@momjian.us>
Mon, 4 Jul 2005 14:12:45 +0000 (14:12 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 4 Jul 2005 14:12:45 +0000 (14:12 +0000)
SELECT date_trunc('week', '2002-12-31'::date);

Backpatch to 8.0.X.

Per report from Nick Johnson.

src/backend/utils/adt/timestamp.c

index 6ade3fb71fdd2688f81cfd25f71a4ecd8819d5ef..491a6ac14a3691bff3fa8454fda32c24fd9cfccf 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.117.4.2 2005/05/26 02:10:02 neilc Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.117.4.3 2005/07/04 14:12:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2755,9 +2755,12 @@ timestamp_trunc(PG_FUNCTION_ARGS)
                                /*
                                 *      If it is week 52/53 and the month is January,
                                 *      then the week must belong to the previous year.
+                                *      Also, some December dates belong to the next year.
                                 */
                                if (woy >= 52 && tm->tm_mon == 1)
                                        --tm->tm_year;
+                               if (woy <= 1 && tm->tm_mon == 12)
+                                       ++tm->tm_year;
                                isoweek2date(woy, &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
                                tm->tm_hour = 0;
                                tm->tm_min = 0;
@@ -2886,9 +2889,12 @@ timestamptz_trunc(PG_FUNCTION_ARGS)
                                /*
                                 *      If it is week 52/53 and the month is January,
                                 *      then the week must belong to the previous year.
+                                *      Also, some December dates belong to the next year.
                                 */
                                if (woy >= 52 && tm->tm_mon == 1)
                                        --tm->tm_year;
+                               if (woy <= 1 && tm->tm_mon == 12)
+                                       ++tm->tm_year;
                                isoweek2date(woy, &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
                                tm->tm_hour = 0;
                                tm->tm_min = 0;