我试图将日期 - 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;
答案 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;
代替。