Oracle函数无法通过日期 - DAYS

时间:2017-07-19 08:52:35

标签: sql oracle

我试图将日期 - DAYS传递给Oracle函数,但我一直收到错误。

这个工作正常:

SELECT
    TRUNC(SYSDATE) - 730 DAYS
FROM
    dual;

这个返回错误: ORA-00907:缺少右括号

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

当我将其更改为另一个SELECT时,它可以正常工作,但为什么会这样呢? 我真的很喜欢上面那个,因为它更容易+如果我需要将它改为MONTH或YEAR或其他什么,它很容易。但它不起作用。

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

1 个答案:

答案 0 :(得分:1)

您错误地认为您正在处理间隔730 DAYS。但

SELECT TRUNC(SYSDATE) - 730 DAYS FROM dual;

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

因此,您计算TRUNC(SYSDATE) - 730,其中Oracle将730表示为730天,因为这是定义添加或减去日期中的数字的方式,然后您将此结果列称为“DAYS”。

这解释了为什么

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;

代替。