簡體   English   中英

oracle中同一列中兩個日期之間的差異,以天/小時/分鍾為單位

[英]The difference between two dates in the same column in oracle in days/Hours/minutes

我正在計算以天/小時/分鍾為單位的兩個日期之間的差異。

我有一個具有以下數據結構的表:

 ID                   Date                           Location          Type
---------------------------------------------------------------------------------
42ABC          15-NOV-14 12.45.00 PM                    YY            Departed 
42ABC          15-NOV-14 03.10.00 PM                    AA            Arrived
42ABC          18-NOV-14 05.15.00 PM                    AA            Departed
42ABC          18-NOV-14 07.20.00 PM                    YY            Arrived

我如何計算日期差,並得到這樣的東西:

ID                Location                   DURATION
-----------------------------------------------------------------
42ABC               AA                 3 days, 2 hours, 5 minutes 

感謝您對此的投入。

我想到的第一個解決方案是:

SELECT id,
       location,
          TRUNC (date_diff)
       || ' days, '
       || TRUNC ( (date_diff - TRUNC (date_diff)) * 24)
       || ' hours, '
       || MOD ( (date_diff - TRUNC (date_diff)) * 24, 10) * 60
       || ' minutes'
FROM   (SELECT   id, location, MAX (date) - MIN (date) AS date_diff
        FROM     your_table
        GROUP BY id, location)

當您在Oracle中減去兩個日期時,結果是代表天數的十進制數字,因此從那里算出來的小時和分鍾只是數學運算。 如果您希望它更加復雜(例如,如果數字為零,則刪除部分),那么我建議使用一個函數。

通過從date轉換為timestamp ,也可以使用稍微簡單的解決方案,這將產生interval類型的結果,而不是decimal


interval解決方案:

SELECT id,
       location,
          EXTRACT (DAY FROM date_diff)
       || ' days, '
       || EXTRACT (HOUR FROM date_diff)
       || ' hours, '
       || EXTRACT (MINUTE FROM date_diff)
       || ' minutes'
FROM   (SELECT   id, location, 
                 CAST(MAX (date) as timestamp) 
                 - CAST(MIN (date) as timestamp) AS date_diff
        FROM     your_table
        GROUP BY id, location)

可以的:

select T1.ID, T2.LOCATION, round(T2.DDATE - T1.DDATE) || ' days, ' ||
            trunc(mod((T2.DDATE - T1.DDATE)*24, 24)) || ' hours, ' ||
            trunc(mod((T2.DDATE - T1.DDATE)*24*60, 60)) || ' minutes' duration
from YOUR_TABLE T1, YOUR_TABLE T2
where T2.ID = T1.ID
  and T2.LOCATION = T1.LOCATION
  and T1.TYPE = 'Arrived'
  and T2.TYPE = 'Departed'
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM