Dave Page wrote:
> This was posted as a documentation comment:
> 
> to_char(interval '0d 0h 12m 44s', 'DD HH MI SS');
> with HH and HH12 will return 12 instead of 0.
> 
> Testing on 8.4.1, it does seem to be the case that you get "00 12 12
> 44". Seems bogus to me, but am I and the OP missing something?

Fixed with the attached patch.  I think HH and HH24 should be the same
for intervals.  It is hard to explain why zero hours should show as
'12' for intervals.

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com
  PG East:  http://www.enterprisedb.com/community/nav-pg-east-2010.do
  + If your life is a hard drive, Christ can be your backup. +
Index: src/backend/utils/adt/formatting.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v
retrieving revision 1.163
diff -c -c -r1.163 formatting.c
*** src/backend/utils/adt/formatting.c	16 Feb 2010 21:18:01 -0000	1.163
--- src/backend/utils/adt/formatting.c	23 Feb 2010 01:39:21 -0000
***************
*** 2089,2096 ****
  			case DCH_HH:
  			case DCH_HH12:
  				sprintf(s, "%0*d", S_FM(n->suffix) ? 0 : 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);
--- 2089,2096 ----
  			case DCH_HH:
  			case DCH_HH12:
  				sprintf(s, "%0*d", S_FM(n->suffix) ? 0 : 2,
! 						!is_interval && 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);
-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to