Help with date math

Started by Chris Hooverover 18 years ago4 messagesgeneral
Jump to latest
#1Chris Hoover
revoohc@gmail.com

I need some help. I am trying to replicate a function from Sybase ASA, and
am having difficulty.

I need to be able to subtract 2 date (or timestamps) and return the results
expressed in days, weeks, month, quarters, or years. How do I do this?

I believe Postgres is returning the number of days when you subtract to
days.
i.e. postgres=# select current_date - '2007/01/01';
?column?
----------
200
(1 row)

However, I can not figure out how to get the results expressed as 7 months,
or 2 quarters, x weeks, or 0 years. I have tried to use date_part, but
since the subtraction is returning an integer, it is not happy.

Any help would be greatly appreciated.

Chris

P.S.

I'm trying to replicate Sybase's datediff function.

#2Reid Thompson
Reid.Thompson@ateb.com
In reply to: Chris Hoover (#1)
Re: Help with date math

Chris Hoover wrote:

I need some help. I am trying to replicate a function from Sybase
ASA, and am having difficulty.

I need to be able to subtract 2 date (or timestamps) and return the
results expressed in days, weeks, month, quarters, or years. How do I
do this?

I believe Postgres is returning the number of days when you subtract
to days.
i.e. postgres=# select current_date - '2007/01/01';
?column?
----------
200
(1 row)

However, I can not figure out how to get the results expressed as 7
months, or 2 quarters, x weeks, or 0 years. I have tried to use
date_part, but since the subtraction is returning an integer, it is
not happy.

Any help would be greatly appreciated.

Chris

P.S.

I'm trying to replicate Sybase's datediff function.

postgres=# select age(current_date,'2007/01/01');
age
----------------
6 mons 20 days
(1 row)

http://www.postgresql.org/docs/8.2/static/functions-datetime.html

#3Reid Thompson
Reid.Thompson@ateb.com
In reply to: Chris Hoover (#1)
Re: Help with date math

Chris Hoover wrote:

I need some help. I am trying to replicate a function from Sybase
ASA, and am having difficulty.

I need to be able to subtract 2 date (or timestamps) and return the
results expressed in days, weeks, month, quarters, or years. How do I
do this?

I believe Postgres is returning the number of days when you subtract
to days.
i.e. postgres=# select current_date - '2007/01/01';
?column?
----------
200
(1 row)

However, I can not figure out how to get the results expressed as 7
months, or 2 quarters, x weeks, or 0 years. I have tried to use
date_part, but since the subtraction is returning an integer, it is
not happy.

Any help would be greatly appreciated.

Chris

P.S.

I'm trying to replicate Sybase's datediff function.

postgres=# select date_part('month', age(current_date, '2007/01/01'));
date_part
-----------
6
(1 row)

#4Ragnar
gnari@hive.is
In reply to: Chris Hoover (#1)
Re: Help with date math

On f�s, 2007-07-20 at 11:08 -0400, Chris Hoover wrote:

I need some help. I am trying to replicate a function from Sybase
ASA, and am having difficulty.

I need to be able to subtract 2 date (or timestamps) and return the
results expressed in days, weeks, month, quarters, or years. How do I
do this?

I believe Postgres is returning the number of days when you subtract
to days.

However, I can not figure out how to get the results expressed as 7
months,

would not 6 months be more logical?

or 2 quarters, x weeks, or 0 years.

have you tried to use extract() ?

there is an old compatibility project on pgfoundry that has a
datediff function, but i have no idea how well it copies the
mssql behaviour.
http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/mssqlsupport/datetimefunctions.sql?rev=1.1.1.1&content-type=text/x-cvsweb-markup

it looks a bit simplistic to me, but maybe that is exactly what
you need.

gnari