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

标签 oracle datetime nvl

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

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

ORA-00932: inconsistent datatypes: expected NUMBER got DATE

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

最佳答案

来自here :

The first parameter to NVL is determining the expected datatype of the returned column, with the trunc function defaulting that to NUMBER because it's parameter is NULL. The second parameter to NVL needs to match that datatype which it doesn't because it is a date.

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;

关于Oracle NVL 函数不允许第二个参数作为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30916914/

相关文章:

c# - 格式化DateTime.Now

java - 特定年份特定月份的天数?

php - MySQL SELECT DateTime(员工签到报告)

java - JPA 1.0 中缺少 NVL() 的解决方法

sql - 如何替换oracle数据库列中的特定值?

c# - 如何在 IIS 实例中的所有应用程序/虚拟目录/版本之间共享一个 Oracle 连接池?

sql - NVL 功能

plsql - PL/SQL 中用于 varchar 处理的 NVL 与 NVL2

java - Java 中的 Oracle 查询

oracle - 在 ubuntu 18.04 上安装 oracle 12c R2