Обсуждение: AGE function
When I execute this statement :
select AGE(TO_DATE('20041101','yyyymmdd'),
TO_DATE('19991201','yyyymmdd'))
at postgre 7.3.3, the result :age --------------------- 4 years 11 mons 1 day
at postgre 8.0.3, the result :age --------------- 4 years 11 mons
My question :
1. How does postgre 7.3.3 calculate AGE function?
2. Why the result produced by postgre 7.3.3
is different from postgre 8.0.3 ?
Thanks,
Louise
______________________________________________________
Click here to donate to the Hurricane Katrina relief effort.
http://store.yahoo.com/redcross-donate3/
On Tue, Sep 06, 2005 at 10:05:06PM -0700, Louise Catherine wrote:
> When I execute this statement :
> select AGE(TO_DATE('20041101','yyyymmdd'),
> TO_DATE('19991201','yyyymmdd'))
>
> at postgre 7.3.3, the result :
> age
> ---------------------
> 4 years 11 mons 1 day
>
> at postgre 8.0.3, the result :
> age
> ---------------
> 4 years 11 mons
>
> My question :
> 1. How does postgre 7.3.3 calculate AGE function?
> 2. Why the result produced by postgre 7.3.3
> is different from postgre 8.0.3 ?
I get the same answer ("4 years 11 mons") in 7.2.8, 7.3.10, 7.4.8,
8.0.3, and 8.1beta1. Have you verified that to_date() is returning
the correct dates? What are the results of the following queries
on each of your systems?
SELECT TO_DATE('19991201','yyyymmdd'), TO_TIMESTAMP('19991201','yyyymmdd');
SELECT TO_DATE('20041101','yyyymmdd'), TO_TIMESTAMP('20041101','yyyymmdd');
SHOW TimeZone;
What operating system are you using? Prior to 8.0, PostgreSQL
relied on the system's timezone files; as of 8.0 it has its own
timezone database. I don't know if that matters, but it's one
difference between 8.0 and previous versions that might be relevant
to the problem.
BTW, it's "PostgreSQL" or "Postgres," not "postgre."
--
Michael Fuhr
--- Michael Fuhr <mike@fuhr.org> wrote:
> On Tue, Sep 06, 2005 at 10:05:06PM -0700, Louise
> Catherine wrote:
> > When I execute this statement :
> > select AGE(TO_DATE('20041101','yyyymmdd'),
> > TO_DATE('19991201','yyyymmdd'))
> >
> > at postgre 7.3.3, the result :
> > age
> > ---------------------
> > 4 years 11 mons 1 day
> >
> > at postgre 8.0.3, the result :
> > age
> > ---------------
> > 4 years 11 mons
> >
> > My question :
> > 1. How does postgre 7.3.3 calculate AGE function?
> > 2. Why the result produced by postgre 7.3.3
> > is different from postgre 8.0.3 ?
>
> I get the same answer ("4 years 11 mons") in 7.2.8,
> 7.3.10, 7.4.8,
> 8.0.3, and 8.1beta1. Have you verified that
> to_date() is returning
> the correct dates? What are the results of the
> following queries
> on each of your systems?
>
> SELECT TO_DATE('19991201','yyyymmdd'),
> TO_TIMESTAMP('19991201','yyyymmdd');
> SELECT TO_DATE('20041101','yyyymmdd'),
> TO_TIMESTAMP('20041101','yyyymmdd');
> SHOW TimeZone;
at PostgreSQL 7.3.3 :to_date to_timestamp ---------- --------------------- 1999-12-01 1999-12-01
00:00:00+07to_date to_timestamp ---------- --------------------- 2004-11-01 2004-11-01 00:00:00+07
TimeZone ----------- unknown
at PostgreSQL 8.0.3 :to_date to_timestamp ---------- --------------------- 1999-12-01 1999-12-01
00:00:00+07to_date to_timestamp ---------- --------------------- 2004-11-01 2004-11-01 00:00:00+07
TimeZone ------------ Asia/Jakarta
> What operating system are you using?
I'm using SuSE Linux 9.0 for the operating system
The result from your queries are similar, so what's
wrong in my queries? What should I do? Cause I must
migrate database from PostgreSQL 7.3.3 to
PostgreSQl 8.0.3.
> BTW, it's "PostgreSQL" or "Postgres," not "postgre."
Sorry about the name :)
Thanks,
Louise
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
am 06.09.2005, um 22:05:06 -0700 mailte Louise Catherine folgendes:
> When I execute this statement :
> select AGE(TO_DATE('20041101','yyyymmdd'),
> TO_DATE('19991201','yyyymmdd'))
> ...
> 4 years 11 mons 1 day
> 4 years 11 mons
>
> My question :
> 1. How does postgre 7.3.3 calculate AGE function?
> 2. Why the result produced by postgre 7.3.3
> is different from postgre 8.0.3 ?
How long is a month? 28 days, 29 days, 30 days, 31 days?
select TO_DATE('20041101','yyyymmdd') - TO_DATE('19991201','yyyymmdd');
This is under 7.2.1 and 8.0.3 tha same: 1797. I guess, this is a
rounding problem.
Regards, Andreas
--
Andreas Kretschmer (Kontakt: siehe Header)
Heynitz: 035242/47212, D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net=== Schollglas Unternehmensgruppe ===
On Tue, Sep 06, 2005 at 10:05:06PM -0700, Louise Catherine wrote: > 1. How does postgre 7.3.3 calculate AGE function? > 2. Why the result produced by postgre 7.3.3 > is different from postgre 8.0.3 ? The change appears to have been committed in 7.4 and later in response to Bug #1332: http://archives.postgresql.org/pgsql-bugs/2004-12/msg00013.php http://archives.postgresql.org/pgsql-committers/2004-12/msg00009.php http://archives.postgresql.org/pgsql-committers/2004-12/msg00008.php -- Michael Fuhr
Louise Catherine <r1c4n@yahoo.com> writes:
> When I execute this statement :
> select AGE(TO_DATE('20041101','yyyymmdd'),
> TO_DATE('19991201','yyyymmdd'))
> at postgre 7.3.3, the result :
> age
> ---------------------
> 4 years 11 mons 1 day
With TimeZone set to 'Asia/Jakarta' on a Linux machine, I can reproduce
that behavior in 7.3.* but not 7.4 and later. I believe this is the
relevant change:
2004-12-01 14:57 tgl
* src/backend/utils/adt/timestamp.c (REL7_4_STABLE): Fixtimestamptz_age() to do calculation in local timezone not GMT,
perbug1332.
and here is a link to the discussion that prompted the change:
http://archives.postgresql.org/pgsql-bugs/2004-12/msg00013.php
regards, tom lane
On Wed, Sep 07, 2005 at 08:24:54AM -0600, Michael Fuhr wrote: > On Tue, Sep 06, 2005 at 10:05:06PM -0700, Louise Catherine wrote: > > 1. How does postgre 7.3.3 calculate AGE function? > > 2. Why the result produced by postgre 7.3.3 > > is different from postgre 8.0.3 ? > > The change appears to have been committed in 7.4 and later in > response to Bug #1332: Specifically, 7.4.7 and later. -- Michael Fuhr