我正在尝试将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}}子句正确显示值似乎还有很长的路要走
任何想法我做错了什么?
提前致谢
答案 0 :(得分:8)
您不能从SELECT
子句引用WHERE
列表中定义的别名。因此,如果您在NVL
列表中应用SELECT
函数,则需要在WHERE
子句中进行相同的函数调用(如您所示)或者您需要应用内联视图中的函数
SELECT column1
FROM (SELECT nvl(column1, 0) column1
FROM table1)
WHERE column1 <= 1
请注意,对于一般的理智,如果COLUMN1
是NUMBER
,则NVL
的第二个参数也应该是NUMBER
。否则,您将进行隐式转换,并且您的比较操作可能最终使用字符串比较语义而不是数字比较语义。由于字符串'12'小于字符串'2',因此可能会导致意外结果。
答案 1 :(得分:3)
你已经表明了正确的方法。
另一种选择是
OR column IS NULL