我需要獲取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你的問題絕不*沒有評論? –