查询oracle db中的number字段

时间:2014-01-21 11:45:34

标签: sql oracle

我的问题可能是如此愚蠢,以至于我遗漏了一些非常明显的东西。我有一个带有数字字段的表,表示布尔值,1或0.我的表是这样创建的:

create table mytable ("summarized" NUMBER DEFAULT 0)

..我想查询数字字段'summa'等于0的记录。现在看看下面的查询,实际输出放在查询后面:

select count(*) from mytable where summarized = 0; -- 0
select count(*) from mytable where summarized = 1; -- 0
select count(*) from mytable where summarized != 0; -- 88223
select count(*) from mytable where summarized != 1; -- 1594
select count(*) from mytable where to_char(summarized) = '0'; -- 1594
select summarized, count(*) from mytable group by summarized; -- 1 = 88223, 0 = 1594

我的第一直觉就是像第一个一样创建我的查询。我似乎无法理解为什么它不起作用以及为什么我必须使用to_char函数,如果我想在where子句中使用'equals 0'。

编辑: 在我尝试答案的时候,我注意到我无法重现问题,即使是带引号的列名。在制作了我的表副本并删除旧表后,我的查询和我的应用程序再次按预期工作。我不确定是什么导致了这种异常,但它现在已经消失了。

我很抱歉占用你的时间,但是感谢大家在答案中的有用评论! (我希望我可以给你一个upvote,但我的代表太低了)

2 个答案:

答案 0 :(得分:2)

一个良好的开端是对该列设置检查约束:

alter table mytable add constraint chk_mytable_summarized check (summarized in (0,1))

...还有一个非空约束......

alter table mytable modify (summarized  not null)

(不要在对象名称周围使用双引号,如Nagaraj所说)

答案 1 :(得分:1)

表创建语法

create table mytable (summarized NUMBER DEFAULT 0)

select count(*) from mytable where summarized != 0; 

SQL FIDDLE