Oracle NVL问题

时间:2011-09-13 17:22:44

标签: sql oracle oracle11g

我正在尝试将null值作为我的数据库中的其他内容传递,它似乎没有像Where这样的select NVL(column1, '0') column1 from table1 子句

    0   test1
    0   test2   
    1   test3

产生这个

select NVL(column1, '0') column1 from table1 where column1 <=1

但是当我像这样添加where子句时

    1   test3

它产生了这个

select NVL(column1, '0') column1 
from table1 
where NVL(column1, '0') <=1

但是现在如果我将以下内容添加到查询中就可以了

Where

但是,使用{{1}}子句正确显示值似乎还有很长的路要走

任何想法我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:8)

您不能从SELECT子句引用WHERE列表中定义的别名。因此,如果您在NVL列表中应用SELECT函数,则需要在WHERE子句中进行相同的函数调用(如您所示)或者您需要应用内联视图中的函数

SELECT column1
  FROM (SELECT nvl(column1, 0) column1
          FROM table1)
 WHERE column1 <= 1

请注意,对于一般的理智,如果COLUMN1NUMBER,则NVL的第二个参数也应该是NUMBER。否则,您将进行隐式转换,并且您的比较操作可能最终使用字符串比较语义而不是数字比较语义。由于字符串'12'小于字符串'2',因此可能会导致意外结果。

答案 1 :(得分:3)

你已经表明了正确的方法。

另一种选择是

OR column IS NULL