[SQL] formatting intervals with to_char

2006-10-03 Thread Graham Davis

Hi,

I'm trying to format the output of a time interval so that it displays 
as HH:MM:SS no matter how many days it spans.  So for instance, an 
interval of 2 days 4 hours and 0 minutes would look something like 
"52:00:00".  The documentation for to_char states that:


"|to_char(interval)| formats HH and HH12 as hours in a single day, while 
HH24 can output hours exceeding a single day, e.g. >24."


However I can not get it to work with time intervals that span more than 
1 day.  For instance, the following query returns this time interval:


Query:
select ('2006-09-15T23:59:00'::timestamp - '2006-09-01 
09:30:41'::timestamp);


Result:
14 days 14:28:19

But when I run to_char on this with HH24, it doesn't take into effect 
the number of days:


Query:
select to_char(('2006-09-15T23:59:00'::timestamp - '2006-09-01 
09:30:41'::timestamp), 'HH24:MI:SS');


Result:
14:28:19

It just gives me the offset of hours, min, seconds on that 14th day.  
The result I'm looking for is:  350:28:19


What am I doing wrong, or how can I get this desired output?  Thanks,

--
Graham Davis
Refractions Research Inc.
[EMAIL PROTECTED]


---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [SQL] formatting intervals with to_char

2006-10-04 Thread Graham Davis
I haven't heard any replies from this, so in the meantime I've found a 
hacky way to get the output I desire.  I'm basically calculating the 
hours on the fly and piecing together a formatted string with 
concatenations like this:


SELECT
(((EXTRACT(day from time_idle)*24)+EXTRACT(hour from time_idle)) || ':' ||
   EXTRACT(minute from time_idle) || ':' || EXTRACT(second from 
time_idle))::interval AS myinterval

FROM
( SELECT ('2006-09-15T23:59:00'::timestamp - '2006-09-01 
09:30:41'::timestamp) AS time_idle) FROM_TABLE;


If anyone knows a better/proper way to get this result, let me know.  
Thanks,


Graham.



Graham Davis wrote:


Hi,

I'm trying to format the output of a time interval so that it displays 
as HH:MM:SS no matter how many days it spans.  So for instance, an 
interval of 2 days 4 hours and 0 minutes would look something like 
"52:00:00".  The documentation for to_char states that:


"|to_char(interval)| formats HH and HH12 as hours in a single day, 
while HH24 can output hours exceeding a single day, e.g. >24."


However I can not get it to work with time intervals that span more 
than 1 day.  For instance, the following query returns this time 
interval:


Query:
select ('2006-09-15T23:59:00'::timestamp - '2006-09-01 
09:30:41'::timestamp);


Result:
14 days 14:28:19

But when I run to_char on this with HH24, it doesn't take into effect 
the number of days:


Query:
select to_char(('2006-09-15T23:59:00'::timestamp - '2006-09-01 
09:30:41'::timestamp), 'HH24:MI:SS');


Result:
14:28:19

It just gives me the offset of hours, min, seconds on that 14th day.  
The result I'm looking for is:  350:28:19


What am I doing wrong, or how can I get this desired output?  Thanks,




--
Graham Davis
Refractions Research Inc.
[EMAIL PROTECTED]


---(end of broadcast)---
TIP 4: Have you searched our list archives?

  http://archives.postgresql.org


Re: [HACKERS] timestamp subtraction (was Re: [SQL] formatting intervals

2006-10-06 Thread Graham Davis
Great, it's nice to see that this might get rolled into one of the next 
releases.  Thanks,


Graham.


Tom Lane wrote:


Michael Glaesemann <[EMAIL PROTECTED]> writes:
 

Considering how late it is in the cycle, perhaps the change in  
behavior should come in 8.3.
   



Yeah, there's not really enough time to think through the consequences
now.  I'd like to experiment with it for 8.3 though.

regards, tom lane
 




--
Graham Davis
Refractions Research Inc.
[EMAIL PROTECTED]


---(end of broadcast)---
TIP 6: explain analyze is your friend