Thread: BUG #5031: DATE_TRUNC returns the wrong value when specifying MONTH
The following bug has been logged online: Bug reference: 5031 Logged by: Mark Douglas Email address: mark@steelhousemedia.com PostgreSQL version: 8.4.0 Operating system: Ubunto Linux Description: DATE_TRUNC returns the wrong value when specifying MONTH Details: The following use of DATE_TRUNC returns the wrong value. I called the function on 2009-09-02. It should return '2009-09-01 00:00:00' for the following usage: SELECT DATE_TRUNC('MONTH', CURRENT_DATE); It instead returns '2009-08-31 17:00:00. Casting CURRENT_DATE to a TIMESTAMP causes it to return the correct value but that shouldn't be required. Cast example: SELECT DATE_TRUNC('MONTH', CAST(CURRENT_DATE AS TIMESTAMP));
"Mark Douglas" <mark@steelhousemedia.com> writes: > The following use of DATE_TRUNC returns the wrong value. I called the > function on 2009-09-02. It should return '2009-09-01 00:00:00' for the > following usage: > SELECT DATE_TRUNC('MONTH', CURRENT_DATE); > It instead returns '2009-08-31 17:00:00. Really? What timezone setting are you using? I get postgres=# SELECT DATE_TRUNC('MONTH', CURRENT_DATE); date_trunc ------------------------ 2009-09-01 00:00:00-04 (1 row) with timezone set to 'America/New_York' or equivalent. This test might also be instructive: postgres=# select CURRENT_DATE::timestamptz; timestamptz ------------------------ 2009-09-03 00:00:00-04 (1 row) regards, tom lane
Mark Douglas <mark@steelhousemedia.com> writes: > I have my timezone set to GMT so there really shouldn't be any time zone adjustments. Okay ... postgres=# set timezone = GMT; SET postgres=# SELECT DATE_TRUNC('MONTH', CURRENT_DATE); date_trunc ------------------------ 2009-09-01 00:00:00+00 (1 row) I suspect there's something you're not telling us, like you're using a client-side library that is doing timezone adjustments behind your back. regards, tom lane
I have my timezone set to GMT so there really shouldn't be any time zone ad= justments. Mark On 9/2/09 10:01 PM, "Tom Lane" <tgl@sss.pgh.pa.us> wrote: "Mark Douglas" <mark@steelhousemedia.com> writes: > The following use of DATE_TRUNC returns the wrong value. I called the > function on 2009-09-02. It should return '2009-09-01 00:00:00' for the > following usage: > SELECT DATE_TRUNC('MONTH', CURRENT_DATE); > It instead returns '2009-08-31 17:00:00. Really? What timezone setting are you using? I get postgres=3D# SELECT DATE_TRUNC('MONTH', CURRENT_DATE); date_trunc ------------------------ 2009-09-01 00:00:00-04 (1 row) with timezone set to 'America/New_York' or equivalent. This test might also be instructive: postgres=3D# select CURRENT_DATE::timestamptz; timestamptz ------------------------ 2009-09-03 00:00:00-04 (1 row) regards, tom lane
You're correct. When I run this from psql it returns the correct result. Wh= en I run it from DBVisualizer, which I normally use, it adjust the result t= o my local time zone. Thanks for looking into it. Sorry about bugging you w= ith that. Thanks, Mark On 9/2/09 10:24 PM, "Tom Lane" <tgl@sss.pgh.pa.us> wrote: Mark Douglas <mark@steelhousemedia.com> writes: > I have my timezone set to GMT so there really shouldn't be any time zone = adjustments. Okay ... postgres=3D# set timezone =3D GMT; SET postgres=3D# SELECT DATE_TRUNC('MONTH', CURRENT_DATE); date_trunc ------------------------ 2009-09-01 00:00:00+00 (1 row) I suspect there's something you're not telling us, like you're using a client-side library that is doing timezone adjustments behind your back. regards, tom lane