我正在尝试将NULL值传递给数据库中的其他内容,并且在没有这样的Where子句的情况下它似乎可以正常工作

select NVL(column1, '0') column1 from table1


产生这个

    0   test1
    0   test2
    1   test3


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

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


它产生这个

    1   test3


但是现在,如果我将以下内容添加到查询中,它将起作用

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


但是用Where子句正确获取值似乎很漫长

任何想法我在做什么错?

提前致谢

最佳答案

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

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


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

关于sql - Oracle NVL问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7405911/

10-11 22:50
查看更多