2013-10-03 337 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