我有一个包含Create_date(DataType=Date)
列的表(事件)。
我想在以前的记录中获得天数或小时数的差异。就像下面的截图一样。
从第二个记录Create_Date我想减去第一个Create_Date,从第三个创建日期到第二个,依此类推。我在Oracle中使用LAG函数,但不确定它是如何计算的。可以请任何人帮我解决这个问题。
incident.create_date - lag(incident.create_date,1) OVER (ORDER BY incident.create_date) AS CREATEDATE_DIFF,
RN 1我们有Create_date(05/01/017 10:40:17 AM
答案 0 :(得分:3)
Oracle中的日期差异以天数计算。如果差异小于一天,您将获得小于1的值。
如果你想把它转换成几小时,你必须将结果乘以24,分钟乘以24 * 60,而秒则乘以24 * 60 * 60。
e.g:
select sysdate - trunc(sysdate) diff_in_days,
(sysdate - trunc(sysdate))*24 diff_in_hours,
(sysdate - trunc(sysdate))*24*60 diff_in_mins,
(sysdate - trunc(sysdate))*24*60*60 diff_in_secs
from dual;
DIFF_IN_DAYS DIFF_IN_HOURS DIFF_IN_MINS DIFF_IN_SECS
------------ ------------- ------------ ------------
0.4342245370 10.4213888888 625.28333333 37517
您可能希望应用ROUND(或者可能是TRUNC / CEIL),具体取决于您希望输出的样子(例如,到2 d.p.,到最近的分钟等)。
答案 1 :(得分:0)
使用
......
(incident.create_date -
lag(incident.create_date,1) OVER (ORDER BY incident.create_date))
*24*60
AS CREATEDATE_DIFF_IN_MINS,.....
获取minutes
中的输出,该输出适合您的样本数据。或者再乘以60
以获得seconds
的输出。
答案 2 :(得分:0)
如果您从另一个日期中减去一个日期,您将获得天数(或其中的分数)作为数字的差异。
您可以使用间隔获取日期/小时/分钟/秒:
SELECT EXTRACT( DAY FROM createdate_diff ) AS days,
EXTRACT( HOUR FROM createdate_diff ) AS hours,
EXTRACT( MINUTE FROM createdate_diff ) AS minutes,
EXTRACT( SECOND FROM createdate_diff ) AS seconds,
createdate_diff
FROM (
SELECT NUMTODSINTERVAL(
create_date - lag(create_date) OVER (ORDER BY create_date),
'DAY'
) AS CREATEDATE_DIFF
FROM incident
);
或者您可以手动执行相同的计算:
SELECT TRUNC( createdate_diff ) AS days,
TRUNC( MOD( createdate_diff * 24, 24 ) ) AS hours,
TRUNC( MOD( createdate_diff * 24 * 60, 60 ) ) AS minutes,
MOD( createdate_diff * 24 * 60 * 60, 60 ) AS seconds,
createdate_diff
FROM (
SELECT create_date - lag(create_date) OVER (ORDER BY create_date)
AS CREATEDATE_DIFF
FROM incident
);