我需要获取2个日期字段的差异,如果更大的日期为空,那么我将使用SYSDATE
来代替。有了这个需求,我创建了解决这个问题(注:此代码将按照组织的标准,而不是我个人的口味)的函数日期差异得到不同于select语句的结果
CREATE FUNCTION F_GET_DIFFERENCE (P_WORKFLOWID NUMBER)
RETURN NUMBER --result in minutes
IS
TIME NUMBER;
BEGIN
TIME := 0
SELECT
F_WORKTIME_DIFF(NVL(X.ENDDATE, SYSDATE), X.STARTDATE)
INTO
TIME
FROM
TABLEX X
WHERE
X.WORKFLOWID = P_WORKFLOWID;
RETURN TIME;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
的F_WORKTIME_DIFF
功能已经存在,并计算一天的工作时间(assumming没有人在上午12点工作,以及类似的事情)。问题是当调用这个函数时,结果会包含额外的时间。这很奇怪,因为在函数中执行查询时,它会返回预期的输出。
实施例(重要的是:在秘鲁日期格式是DD/MM/YYYY HH24:MI:SS)
TABLEX
WORKFLOWID STARTDATE ENDDATE
1 '01/12/2012 10:00:00' null
Assumming服务器一天是在同一天(2012年1月12日),但更长的时间(10点01分00秒),我们执行功能:
SELECT F_GET_DIFFERENCE(1)
FROM DUAL;
结果是:14.
现在,执行所述函数的查询和具有服务器吨ime在10:02:00,结果是2(确切输出)。
我甚至尝试执行此
SELECT
F_WORKTIME_DIFF(NVL(X.ENDDATE, SYSDATE), X.STARTDATE) SELECT_WAY,
F_GET_DIFFERENCE(1) FUNCTION_WAY
FROM
TABLEX X
WHERE
X.WORKFLOWID = 1
,其结果是(具有10:10:00服务器时间)
SELECT_WAY FUNCTION_WAY
10 24
也许是我必须考虑到当任何代价与Oracle一起工作的日期在内部函数或任何可以解释这种奇怪行为的东西?
投掷石头和隐藏的手?请至少发布为什么downvote。 –
另一个*只是想downvote你的问题绝不*没有评论? –