2017-07-19 41 views
1

我試着將日期 - 日期傳遞給Oracle函數,但是我一直收到錯誤。Oracle函數不能通過日期 - DAYS

這一個做工精細:

SELECT 
    TRUNC(SYSDATE) - 730 DAYS 
FROM 
    dual; 

這一次將返回錯誤: ORA-00907:缺少右括號

SELECT 
    MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS) 
FROM 
    dual; 

當我將其更改爲另一選擇,它的工作原理,但爲什麼這樣呢? 我真的很喜歡上面的那個,因爲它更容易+如果我需要將其更改爲MONTH或YEAR或其他,這很容易。但它不起作用。

SELECT 
    MYFUNCTION(
     (
     SELECT 
      TRUNC(SYSDATE) - 730 DAYS 
     FROM 
      dual 
     ) 
    ) 
FROM 
    dual; 

回答

1

你錯誤地認爲你正在處理間隔730 DAYS。但

SELECT TRUNC(SYSDATE) - 730 DAYS FROM dual; 

SELECT TRUNC(SYSDATE) - 730 AS DAYS FROM dual; 

所以你計算TRUNC(SYSDATE) - 730其中甲骨文花費730是指730天,因爲這是增加或減少是指從一個日期了一些如何,然後調用這個結果列「天」。

這就解釋了爲什麼

SELECT MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS) FROM dual; 

導致語法錯誤;您正在使用不屬於的別名(「DAYS」)。

將此

SELECT MYFUNCTION(TRUNC(SYSDATE) - 730) FROM dual; 

SELECT MYFUNCTION(TRUNC(SYSDATE) - INTERVAL '730' DAY(3)) FROM dual; 

代替。