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;
为了获得实际解决问题的答案,我建议编辑问题以包含实际演示问题的代码。