2013-10-03 296 views
1

我遇到需要获取两列之间差异的情况。日期Oracle中的时间差计算

第1栏:01-OCT-13 10点27分15秒
第2栏:01-OCT-13 10时28分00秒

我需要得到与上述两者之间的差异列。我尝试使用' - '运算符,但输出不是预期的方式。
我需要输出如下:00-00-00 00:00:45

+2

时间怎么可能是'10:27:60'?那将是'10:28:00'(一分钟60秒)。这些“DATE”列(在这种情况下尾部60是无效的)?或者它们是'时间戳'列(在这种情况下,尾部60可能意味着代表小数秒,而您只是错过了整秒数)? –

+0

哦对不起...我的错误.. :) – user2037445

+0

列是类型DATE – user2037445

回答

2

尝试此查询,但没有进行测试

SELECT extract(DAY 
       FROM diff) days, 
     extract(hour 
       FROM diff) hours, 
     extract(MINUTE 
       FROM diff) minutes, 
     extract(SECOND 
       FROM diff) seconds, 
     extract(YEAR 
       FROM diff) years 
FROM 
    (SELECT (CAST (to_date(t.column1, 'yyyy-mm-dd hh:mi:ss') AS TIMESTAMP) -CAST (to_date(t.column2, 'yyyy-mm-dd hh:mi:ss') AS TIMESTAMP)) diff 
    FROM tablename AS t) 
+0

但是,只有秒差异正确..!?如果日期以及时间和分钟也有所不同,该怎么办? – user2037445

+0

是的它的工作很好。我可以提取所有在一个单一的查询? – user2037445

+0

是的,它的工作非常感谢你。如果我想找到月份和年份的差异,我是否应该按照相同的程序 – user2037445

1

试试这个太,

WITH T(DATE1, DATE2) AS 
(
SELECT TO_DATE('01-OCT-13 10:27:15', 'DD-MON-YY HH24:MI:SS'),TO_DATE('01-OCT-13 10:28:00', 'DD-MON-YY HH24:MI:SS') FROM DUAL 
) 
SELECT floor(date2 - date1) 
      || ' DAYS ' 
      || MOD(FLOOR ((date2 - date1) * 24), 24) 
      || ' HOURS ' 
      || MOD (FLOOR ((date2 - date1) * 24 * 60), 60) 
      || ' MINUTES ' 
      || MOD (FLOOR ((date2 - date1) * 24 * 60 * 60), 60) 
      || ' SECS ' time_difference 

FROM T; 
+0

我没有得到你。 :( – user2037445

+0

另一种方法来提取几天,几小时,几分钟和几秒B/W两个日期 – Dba

0

你可以请使用以下查询找到差异seconds

select 24*60*60* 
(to_date('01-OCT-13 10:28:00', 'yyyy-mm-dd hh24:mi:ss')- 
to_date('01-OCT-13 10:27:15', 'yyyy-mm-dd hh24:mi:ss')) diff_secs 
from dual; 

SQL Fiddle

+0

但我需要日期之间的差异以及包括日,月,年,小时,分钟,秒 – user2037445