2014-10-09 32 views
0

我已经在我的数据库表中进行新列:不等于运算符=无法正常运行在Oracle中

alter table TABLE add (COLUMN NUMBER(1)); 

现在我想选择所有记录,其中列的值不为零,无论是它的空(NULL)的一些其他数

SELECT * FROM TABLE WHERE COLUMN != 0; 

,默认情况下,因为这列最近增加了,所以应该返回所有记录,但不返回任何所有列都有空/空值。

但是,如果一个记录的此列的值更改为0并在查询下运行,则它工作正常。

SELECT * FROM TABLE WHERE COLUMN = 0; 

请帮助我想选择所有记录的值不是0

+0

第一种情况下做这样NULL不能与相等运算符进行比较,请使用IS – 2014-10-09 12:17:56

回答

5

对于NULL值,你必须明确给出IS NULLIS NOT NULL

SELECT * FROM TABLE WHERE COLUMN <> 0 OR COLUMN IS NULL; 

OR

SELECT * FROM TABLE WHERE NVL(COLUMN,1) <> 0 

优化器是怎么回事,即使你去NVL()

+0

您声明“优化器将会执行类似在第一种情况下,即使你使用NVL()“。你能给出一个参考文件吗?你让我怀疑,但我认为这不是真的。 – 2014-10-09 13:30:35