Oracle NVL 函数不允许第二个参数作为日期时间


select nvl(trunc(null),trunc(sysdate)) from dual;

执行上述查询时,我收到以下错误

ORA-00932: inconsistent datatypes: expected NUMBER got DATE

看起来当我取字符串或数字而不是trunc(sysdate)它运行良好时。

从这里:

NVL 的第一个参数是确定 返回列,trunc 函数默认为 NUMBER 因为它的参数为 NULL。NVL 的第二个参数需要 匹配该数据类型,因为它是日期。

SQL> select nvl(trunc(sysdate), sysdate) as mydate from dual;
MYDATE
-------------------
26/05/2006 00:00:00
SQL> select nvl(trunc(null), sysdate) as mydate from dual;
select nvl(trunc(null), sysdate) as mydate from dual
                        *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got DATE

或者你可以这样做:

SELECT NVL(TO_DATE(TRUNC(NULL)),SYSDATE) FROM dual;

第二个参数的数据类型必须与第一个参数相同。trunc函数已重载。显然,当你给它传递一个null时,它会将值解释为一个数字并返回一个数字。以下任何作品:

SELECT NVL (NULL, TRUNC (SYSDATE)) FROM DUAL;
SELECT NVL (TRUNC (TO_DATE (NULL)), TRUNC (SYSDATE)) FROM DUAL;
SELECT NVL (TRUNC (CAST (NULL AS DATE)), TRUNC (SYSDATE)) FROM DUAL;

跟进:

如果使用的变量被正确定义为日期,那么你应该没有问题。例如,以下内容运行没有错误:

DECLARE
   FUNCTION f
      RETURN DATE IS
   BEGIN
      RETURN NULL;
   END f;
BEGIN
   DBMS_OUTPUT.put_line (NVL (TRUNC (f), TRUNC (SYSDATE)));
END;

为了获得实际解决问题的答案,我建议编辑问题以包含实际演示问题的代码。

相关内容

  • 没有找到相关文章

最新更新