Thứ Năm, 22 tháng 12, 2011

GET THE TIME DIFFERENCE BETWEEN TWO DATE COLUMNS

/*
GET THE TIME DIFFERENCE BETWEEN TWO DATE COLUMNS
*/

--Solution 1
SELECT floor(((date1-date2)*24*60*60)/3600)
       || ' HOURS ' ||
       floor((((date1-date2)*24*60*60) -
       floor(((date1-date2)*24*60*60)/3600)*3600)/60)
       || ' MINUTES ' ||
       round((((date1-date2)*24*60*60) -
       floor(((date1-date2)*24*60*60)/3600)*3600 -
       (floor((((date1-date2)*24*60*60) -
       floor(((date1-date2)*24*60*60)/3600)*3600)/60)*60) ))
       || ' SECS ' time_difference
FROM dates;

--Solution 2
SELECT to_number( to_char(to_date('1','J') +
       (date1 - date2), 'J') - 1)  days,
       to_char(to_date('00:00:00','HH24:MI:SS') +
       (date1 - date2), 'HH24:MI:SS') time
FROM dates;

--Solution 3: use numtodsinterval() function
/*
NUMTODSINTERVAL: This function is new to Oracle 9i. It takes two arguments numtodsinterval(x,c) where x is a number and c is a character string denoting the units of x. Valid units are 'DAY', 'HOUR', 'MINUTE' and 'SECOND'.
This function converts the number x into an INTERVAL DAY TO SECOND datatype.
*/
select numtodsinterval(date1-date2,'day') time_difference from dates;

Source: http://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns