[英]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.