NUMBER(10,2)不等于Oracle中的check

时间:2015-08-22 16:33:08

标签: sql database oracle numbers conditional-statements

我在Table(Oracle)中有一个Number字段,如下所示

TEST_HOURS NUMBER(10,2)

当我尝试以下SQL时它不起作用

select t.test_hours from test_hours t where
where (t.test_hours != 1 or t.test_hours is not null)
and t.id = 11

当我删除此(t.test_hours != 1 or t.test_hours != null)时,它工作正常,但当我包含上述行时,它不会获取数据而且没有error

有人可以帮我解决这个问题。

由于

2 个答案:

答案 0 :(得分:2)

正如叶戈尔的评论所指出的那样,你对该专栏的条件毫无意义。此外,您应该使用IS NOT NULLIS NULL,而不是!=。当您使用!=时,左侧的任何内容为空,则结果将等于NULL,而不是TRUEFALSE

即使使用IS NOT NULL,您的条件也无效,因为TRUE的条件始终为test_hours等于1,因为:

test_hours != 1 FALSE
OR
test_hours IS NOT NULL TRUE

因此结果为TRUE。

你可能想要使用不同的条件。

答案 1 :(得分:1)

我认为你想要,而不是

select t.test_hours
from test_hours t
where (t.test_hours <> 1 and t.test_hours is not null) and t.id = 11

顺便说一句,与NULL的比较是不必要的,因为它会失败。所以更简单的版本是:

select t.test_hours
from test_hours t
where t.test_hours <> 1 and t.id = 11