Oracle 函数无法传入日期 - DAYS



我试图将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;

相反。

相关内容

最新更新