2017-07-19 69 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; 

代替。