Thread: convert interval info into days

convert interval info into days

From
"Johnson, Shaunn"
Date:

Howdy:

Running PostgreSQL 7.2.1 on RedHat Linux 7.2.

How can I convert data in a table that has been created
with the INTERVAL data type into a numeric format?

Say, I have a table with this type of data:

[snip]
-1 years   | 00:00
 00:00      | 1 year 90 days
 00:00      | 1 year 90 days
 00:00      | 1 year 90 days
 00:00      | 1 year 90 days
 00:00      | 1 year 90 days
 00:00      | 1 year 90 days
 1 year     | 2 years
 42 days    | 2 years
 42 days    | 2 years
 -1 years   | 00:00
 -1 years   | 00:00
 -1 years   | 00:00
 42 days    | 2 years
 1 year     | 2 years
[/snip]

I want to convert all of this into days, but
I don't think I can use 'to_char' because
I get things like this:

[snip example]
test_db=> select to_char('2 years 3 mons 17 days'::interval, 'YY MM DD');
 to_char
----------
 02 03 17

--

test_db=> select to_char('2 years'::interval)/365;
ERROR:  Function 'to_char(interval)' does not exist
        Unable to identify a function that satisfies the given argument types
        You may need to add explicit typecasts
[/snip example]

Any suggestions?

Thanks!

-X

Re: convert interval info into days

From
Bruno Wolff III
Date:
On Fri, Aug 22, 2003 at 13:00:57 -0400,
  "Johnson, Shaunn" <SJohnson6@bcbsm.com> wrote:
> Howdy:
>
> I want to convert all of this into days, but
> I don't think I can use 'to_char' because
> I get things like this:

Converting intervals to days is a problem because months are treated as
having 30 days if you try to extract the number of seconds from the
interval (which could then be converted to days). If you have a base
date the interval is relative to, then I think you can get what you
want by extract the epoch from (base_date + interval) - base_date and
then divide by 24*60*60.