Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle函数无法传入日期-天_Sql_Oracle - Fatal编程技术网

Sql Oracle函数无法传入日期-天

Sql Oracle函数无法传入日期-天,sql,oracle,Sql,Oracle,我试图将日期传递给Oracle函数,但不断出错 这一个工作正常: SELECT TRUNC(SYSDATE) - 730 DAYS FROM dual; 此函数返回错误:ORA-00907:缺少右括号 SELECT MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS) FROM dual; 当我将此项更改为另一项选择时,它会起作用,但为什么会这样呢??? 我真的很喜欢上面的一个,因为它更容易+如果我需要把它改成月份或年份或其他什么,它很容

我试图将日期传递给Oracle函数,但不断出错

这一个工作正常:

SELECT
    TRUNC(SYSDATE) - 730 DAYS
FROM
    dual;
此函数返回错误:ORA-00907:缺少右括号

SELECT
    MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS)
FROM
    dual;
当我将此项更改为另一项选择时,它会起作用,但为什么会这样呢??? 我真的很喜欢上面的一个,因为它更容易+如果我需要把它改成月份或年份或其他什么,它很容易。但它不起作用

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

您错误地认为您正在处理的是间隔时间
730天
。但是

SELECT TRUNC(SYSDATE) - 730 DAYS FROM dual;

因此,您计算
TRUNC(SYSDATE)-730
,其中Oracle需要730来表示730天,因为这是如何定义从日期中添加或减去一个数字的,然后您将此结果列称为“天”

这就解释了原因

SELECT MYFUNCTION(TRUNC(SYSDATE) - 730 DAYS) FROM dual;
导致语法错误;您使用的别名(“天”)不属于该别名

做这个

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

相反

SELECT MYFUNCTION(TRUNC(SYSDATE) - 730) FROM dual;
SELECT MYFUNCTION(TRUNC(SYSDATE) - INTERVAL '730' DAY(3)) FROM dual;