Обсуждение: Help with date math
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.
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.
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
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)
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