我试图将date - DAYS传递给Oracle Function,但我不断收到错误。
这个工作正常:
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;
您错误地认为您正在处理间隔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;
相反。