我正在尝试将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
请注意,出于一般性考虑,如果
COLUMN1
是NUMBER
,则NVL
的第二个参数也应该是NUMBER
。否则,您将进行隐式转换,并且比较操作可能最终使用字符串比较语义而不是数字比较语义。由于字符串“ 12”小于字符串“ 2”,因此可能导致意外结果。关于sql - Oracle NVL问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7405911/