This is a discussion on Re: timestamp format bug within the pgsql Hackers forums, part of the PostgreSQL category; --> > -----Original Message----- > From: Kevin Grittner [mailto:Kevin.Grittner@wicourts.gov] > Sent: Thursday, January 31, 2008 9:48 AM > To: Roberts, ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| > -----Original Message----- > From: Kevin Grittner [mailto:Kevin.Grittner@wicourts.gov] > Sent: Thursday, January 31, 2008 9:48 AM > To: Roberts, Jon; pgsql-hackers@postgresql.org > Subject: Re: [HACKERS] timestamp format bug > > >>> On Thu, Jan 31, 2008 at 9:34 AM, in message > <1A6E6D554222284AB25ABE3229A92762715521@nrtexcus70 2.int.asurion.com>, > "Roberts, > Jon" <Jon.Roberts@asurion.com> wrote: > > select to_char(date, 'yyyy-mm-dd hh24:mi:ss.ms') as char, > > date > > from (select timestamp'2008-01-30 15:06:21.560' as date) sub > > > > "2008-01-30 15:06:21.560";"2008-01-30 15:06:21.56" > > > > These two fields should be consistent because they should be formatted > > the same way. > > Why would you think that? > > I would expect the timestamp to be presented with one to nine > digits to the right of the decimal point, depending on the value. I expect the query to return either: "2008-01-30 15:06:21.560";"2008-01-30 15:06:21.560" or: "2008-01-30 15:06:21.56";"2008-01-30 15:06:21.56" The default timestamp format appears to be yyyy-mm-dd hh24:mi:ss.ms but it doesn't follow this for milliseconds. It truncates the trailing zero for timestamps and it does not truncate the trailing zero when cast as a character. I don't care which standard should be adopted but it should be the same. > > I can think of a couple database products which only go to three > decimal positions, and always show three, but that's hardly a > standard. Oracle and MS SQL Server are consistent in this. Jon ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org |
| |||
| >>> On Thu, Jan 31, 2008 at 12:28 PM, in message <1A6E6D554222284AB25ABE3229A92762715525@nrtexcus70 2.int.asurion.com>, "Roberts, Jon" <Jon.Roberts@asurion.com> wrote: > The default timestamp format appears to be yyyy-mm-dd hh24:mi:ss.ms Not to me: select now(); now ------------------------------- 2008-01-31 12:31:40.568746-06 (1 row) ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster |
| |||
| > -----Original Message----- > From: Kevin Grittner [mailto:Kevin.Grittner@wicourts.gov] > Sent: Thursday, January 31, 2008 12:33 PM > To: Roberts, Jon; pgsql-hackers@postgresql.org > Subject: RE: [HACKERS] timestamp format bug > > >>> On Thu, Jan 31, 2008 at 12:28 PM, in message > <1A6E6D554222284AB25ABE3229A92762715525@nrtexcus70 2.int.asurion.com>, > "Roberts, > Jon" <Jon.Roberts@asurion.com> wrote: > > The default timestamp format appears to be yyyy-mm-dd hh24:mi:ss.ms > > Not to me: > > select now(); > now > ------------------------------- > 2008-01-31 12:31:40.568746-06 > (1 row) > I'm guessing that is a server setting on how to format a timestamp. Your appears to be yyyy-mm-dd hh24:mi:ss.us. So on your db, run this query: select sub.t1, to_char(t1, 'yyyy-mm-dd hh24:mi:ss.us') as char_t1 from ( select timestamp'2008-01-31 12:31:40.500000' as t1 ) sub I bet you get this: "2008-01-31 12:31:40.50";"2008-01-31 12:31:40.500000" Don't you think it should have two identical columns? Secondly, this link shows that ms should be 000-999 and us should be 000000-999999. http://www.postgresql.org/docs/8.2/s...ormatting.html All of the other fields are padded like month, day, year, hour, minute, and second and are consistent. The formats ms and us should be consistent too. Jon ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster |
| |||
| >>> On Thu, Jan 31, 2008 at 12:45 PM, in message <1A6E6D554222284AB25ABE3229A92762715527@nrtexcus70 2.int.asurion.com>, "Roberts, Jon" <Jon.Roberts@asurion.com> wrote: > So on your db, run this query: > select sub.t1, to_char(t1, 'yyyy-mm-dd hh24:mi:ss.us') as char_t1 > from > ( > select timestamp'2008-01-31 12:31:40.500000' as t1 > ) sub > > > I bet you get this: > "2008-01-31 12:31:40.50";"2008-01-31 12:31:40.500000" t1 | char_t1 ------------------------+---------------------------- 2008-01-31 12:31:40.50 | 2008-01-31 12:31:40.500000 (1 row) > Don't you think it should have two identical columns? No. Why should the return value of a function influence the input? What would you expect from this query?: select sub.t1, substring(sub.t1 from 2 for 3) as substring_t1 from ( select 'abcde'::text as t1 ) sub > Secondly, this link shows that ms should be 000-999 and us should be > 000000-999999. Yes. That seems to me to work fine, as your examples show. -Kevin ---------------------------(end of broadcast)--------------------------- TIP 5: don't forget to increase your free space map settings |
| ||||
| > -----Original Message----- > From: Kevin Grittner [mailto:Kevin.Grittner@wicourts.gov] > Sent: Thursday, January 31, 2008 1:47 PM > To: Roberts, Jon; pgsql-hackers@postgresql.org > Subject: RE: [HACKERS] timestamp format bug > > >>> On Thu, Jan 31, 2008 at 12:45 PM, in message > <1A6E6D554222284AB25ABE3229A92762715527@nrtexcus70 2.int.asurion.com>, > "Roberts, > Jon" <Jon.Roberts@asurion.com> wrote: > > > So on your db, run this query: > > select sub.t1, to_char(t1, 'yyyy-mm-dd hh24:mi:ss.us') as char_t1 > > from > > ( > > select timestamp'2008-01-31 12:31:40.500000' as t1 > > ) sub > > > > > > I bet you get this: > > "2008-01-31 12:31:40.50";"2008-01-31 12:31:40.500000" > > t1 | char_t1 > ------------------------+---------------------------- > 2008-01-31 12:31:40.50 | 2008-01-31 12:31:40.500000 > (1 row) > > > Don't you think it should have two identical columns? > > No. Why should the return value of a function influence the input? > This is clearly a bug. Don't fix it. I don't care. Jon ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend |