pgsql: Document that age() adds days, then full months.

Started by Bruce Momjianabout 19 years ago4 messagescomitters
Jump to latest
#1Bruce Momjian
bruce@momjian.us

Log Message:
-----------
Document that age() adds days, then full months.

Modified Files:
--------------
pgsql/doc/src/sgml:
func.sgml (r1.382 -> r1.383)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/func.sgml.diff?r1=1.382&r2=1.383)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#1)
Re: pgsql: Document that age() adds days, then full months.

momjian@postgresql.org (Bruce Momjian) writes:

Document that age() adds days, then full months.

AFAICT, this documentation "improvement" is outright wrong.

regards, tom lane

#3Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#2)
Re: pgsql: Document that age() adds days, then full months.

Tom Lane wrote:

momjian@postgresql.org (Bruce Momjian) writes:

Document that age() adds days, then full months.

AFAICT, this documentation "improvement" is outright wrong.

I am now thinking no documentation paragraph is even needed. We have to
use the number of months in the earlier date or simple computations
would not work like:

test=> select age('2004-05-29', '2004-06-28');
age
----------
-30 days
(1 row)

The end of the earlier month is part of the interval between the two
timestamps, while the end of the later month is not. Of course with a
multi-months span there are more chances for variance, but we certainly
should give the right answer for an interval < 1 month. I can just add
a C comment.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#4Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#3)
Re: pgsql: Document that age() adds days, then full months.

Bruce Momjian wrote:

Tom Lane wrote:

momjian@postgresql.org (Bruce Momjian) writes:

Document that age() adds days, then full months.

AFAICT, this documentation "improvement" is outright wrong.

I am now thinking no documentation paragraph is even needed. We have to
use the number of months in the earlier date or simple computations
would not work like:

test=> select age('2004-05-29', '2004-06-28');
age
----------
-30 days
(1 row)

The end of the earlier month is part of the interval between the two
timestamps, while the end of the later month is not. Of course with a
multi-months span there are more chances for variance, but we certainly
should give the right answer for an interval < 1 month. I can just add
a C comment.

I have updated the documentation to read:

Note there can be ambiguity in the <literal>months</> returned by
<function>age</> because different months have a different number of
days. <productname>PostgreSQL</>'s approach uses the month from the
earlier of the two dates when calculating partial months. For example,
<literal>age('2004-06-01', '2004-04-30')</> uses April to yield
<literal>1 mon 1 day</>, while using May would yield <literal>1 mon 2
days</> because May has 31 days, while April has only 30.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +