From a54803149a7beeea6dc8e624c3da561b7f6f5fc9 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 23 Feb 2010 16:14:26 +0000 Subject: [PATCH] Revert recent change of to_char('HH12') handling for intervals; instead improve documentation, and add C comment. --- doc/src/sgml/func.sgml | 7 ++++--- src/backend/utils/adt/formatting.c | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 52049e7a73..689cd34e93 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,4 +1,4 @@ - + Functions and Operators @@ -5317,8 +5317,9 @@ SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})'); to_char(interval) formats HH and - HH12 as hours in a single day, while HH24 - can output hours exceeding a single day, e.g., >24. + HH12 as shown on a 12-hour clock, i.e. zero hours + and 36 hours output as 12, while HH24 + outputs the full hour value, which can exceed 23 for intervals. diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index a41f6f1496..af764e8edb 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------- * formatting.c * - * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.165 2010/02/23 06:29:01 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.166 2010/02/23 16:14:26 momjian Exp $ * * * Portions Copyright (c) 1999-2010, PostgreSQL Global Development Group @@ -2088,10 +2088,10 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out) break; case DCH_HH: case DCH_HH12: + /* display time as shown on a 12-hour clock, even for intervals */ sprintf(s, "%0*d", S_FM(n->suffix) ? 0 : 2, - is_interval ? tm->tm_hour : - tm->tm_hour % (HOURS_PER_DAY / 2) == 0 ? - 12 : tm->tm_hour % (HOURS_PER_DAY / 2)); + tm->tm_hour % (HOURS_PER_DAY / 2) == 0 ? 12 : + tm->tm_hour % (HOURS_PER_DAY / 2)); if (S_THth(n->suffix)) str_numth(s, s, S_TH_TYPE(n->suffix)); s += strlen(s);