db查询的where子句中的NVL和关系运算符

时间:2013-03-14 19:56:03

标签: sql oracle

我正在学习SQL并使用Oracle 11.我正在使用犯罪数据库并试图让犯罪分子收取未付费用。我的查询如下

select first, last, charge_id, (fine_amount + court_fee) as "Total Amount Owed", NVL(amount_paid, null), (fine_amount + court_fee - amount_paid) as "Amount Owed", pay_due_date 
from crime_charges cc, criminals c, crimes
where crimes.crime_id = cc.crime_id and c.criminal_id = crimes.criminal_id and (NVL(fine_amount, 0) + NVL(court_fee, 0)) – NVL(amount_paid, 0 ) > 0;

数据库中有amount_paid和fine_amount以及court_fee的空值。我试图过滤那些不欠任何东西的罪犯 (fine_amount + court_fee) - amount_paid> 0

我一直在说错误 ORA-00920:无效的关系运算符 00920. 00000 - “无效的关系运营商” *原因:
*行动: 行错误:43列:122

我根本无法让NVL在where子句中工作。我已经看到了使用NVL的where子句的例子,但是我看不出它们与我的查询有什么不同。

示例:

SELECT fname, lname, manager_emp_id

FROM employee

WHERE NVL(manager_emp_id, -999) != 7698;

2 个答案:

答案 0 :(得分:1)

首先,我认为在创建数据库时应该避免使用NULL方法,因为所有空值占用了大量空间。在大多数情况下,在数据库中使用NULL是一个糟糕的实现。

NVL(amount_paid,null)表示如下: 如果amount_paid为'null',则将其设置为'null'。

我自己对数据库很新,但这可能是一个问题,请尝试设置NVL(amount_paid,0)。

否则NVL的使用是正确的。

答案 1 :(得分:1)

您使用代替-

等等,什么?

select dump('–') from dual;
Typ=96 Len=3: 239,191,189

select dump('-') from dual;
Typ=96 Len=1: 45
相关问题