Oracle 11G - NVL和AVG

时间:2014-11-27 15:18:32

标签: sql oracle

我想在AVG中嵌入一个NVL表达式。我试图从date_returned中减去start_date以确定贷款的长度(以月为单位)。如果date_returned为null,我想使用今天的日期(sysdate)。以下是我的陈述中的一个片段:

avg(nvl(date_returned,sysdate)-start_date/30) "Loan Length in Months" 

这是抛出ORA-00932错误,数据类型不一致,预计NUMBER得到DATE。

有关如何更正此声明的任何建议?

2 个答案:

答案 0 :(得分:0)

错误可能来自分部:

SQL> select sysdate/30 from dual;
select sysdate/30 from dual
       *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got DATE

Oracle允许添加/减去日期,因为它假设数字表示天数:

SQL> select sysdate-1, sysdate+1 from dual;

SYSDATE-1 SYSDATE+1
--------- ---------
26-NOV-14 28-NOV-14

......但我无法弄清楚乘法/除法的可能意义。

正如乔纳森所指出的,你可能忘记了一个括号; - )

答案 1 :(得分:0)

您的查询应该是这样的,

avg(nvl(date_returned,sysdate)-start_date)/30 "Loan Length in Months" 

你的date_returned也应该是一个日期字段,如果它是NUMBER那么你会得到ORA-00932错误,数据类型不一致,预计NUMBER得到DATE