Oracle NVL问题

Jam*_*lor 2 sql oracle oracle11g

我正在尝试将空值传递给我的数据库中的其他东西,它似乎没有Where像这样的子句

select NVL(column1, '0') column1 from table1
Run Code Online (Sandbox Code Playgroud)

产生这个

    0   test1
    0   test2   
    1   test3
Run Code Online (Sandbox Code Playgroud)

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

select NVL(column1, '0') column1 from table1 where column1 <=1
Run Code Online (Sandbox Code Playgroud)

它产生了这个

    1   test3
Run Code Online (Sandbox Code Playgroud)

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

select NVL(column1, '0') column1 
from table1 
where NVL(column1, '0') <=1
Run Code Online (Sandbox Code Playgroud)

但似乎需要很长时间才能使值正确显示一个Where子句

我有什么想法吗?

提前致谢

Jus*_*ave 8

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

SELECT column1
  FROM (SELECT nvl(column1, 0) column1
          FROM table1)
 WHERE column1 <= 1
Run Code Online (Sandbox Code Playgroud)

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