我试图在我的数据库中传递一个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子句获取正确显示的值似乎有很长的路要走
你知道我做错了什么吗?
提前感谢
发布于 2011-09-14 01:31:06
不能从WHERE子句引用SELECT列表中定义的别名。因此,如果在SELECT列表中应用NVL函数,则需要在WHERE子句中调用相同的函数(如前所述),或者需要在内联视图中应用该函数
SELECT column1
FROM (SELECT nvl(column1, 0) column1
FROM table1)
WHERE column1 <= 1注意,如果COLUMN1是一个NUMBER,那么NVL的第二个参数也应该是一个NUMBER。否则,您将进行隐式转换,并且您的比较操作可能最终使用字符串比较语义而不是数字比较语义。由于字符串'12‘小于字符串'2',这可能导致意外的结果。
发布于 2011-09-14 01:35:56
您已经指出了正确的方法。
另一种选择是说
OR column IS NULLhttps://stackoverflow.com/questions/7405911
复制相似问题