Oracle没有结果,小查询

时间:2012-09-27 17:02:55

标签: sql oracle isnull

我遇到了一些sql的问题。当我运行以下查询时:

Select * from teleapp;

我得到了很多结果。结果包括一个列(称为cashwithappyn),其中包含TONS为空或空数据单元格。 (它们看起来是空的,不要说空)

列信息是:

ColumnName      ID          Null? Data Type             Histogram   Num Distinct  Num Nulls    Density
CASHWITHAPPYN   54          Y     VARCHAR2(1 Byte)      Frequency   2             56895         0               

当我尝试运行以下查询时:

Select * from teleapp where cashwithappyn = null;

Select * from teleapp where cashwithappyn = '';

Select * from teleapp where cashwithappyn not like '';

Select * from teleapp where cashwithappyn not in ('Y','N');

或任何类型的组合,我似乎无法获得cashwithappyn中没有任何内容的所有行。

有什么想法吗?请帮助,这是我被指派做的项目的最后一部分,我只需要弄明白。

感谢。

4 个答案:

答案 0 :(得分:6)

也许该列包含空格。在这种情况下,你可以做

WHERE TRIM(CASHWITHAPYYN) IS NULL

TRIM删除之前和之后的所有空格,如果不再有任何空格,则值变为NULL

e.g。

TRIM(' ') IS NULL -- one blank removed = true
TRIM(NULL)  IS NULL -- true

同样NULL无法与= NULL进行比较,但必须使用IS NULLNULL不是这样的值,这就是比较永远不会起作用的原因。

答案 1 :(得分:5)

您需要使用IS NULL

Select * from teleapp where cashwithappyn is null;

答案 2 :(得分:4)

使用null的逻辑测试表达式(=,Not In,Like等)导致false,因此以下所有结果都为false

1 = NULL
1 <> NULL
NULL = NULL
NULL <> NULL
NULL NOT IN ('a','b')
NULL Not Like NULL

此外,在oracle中,零长度字符串为空,因此NOT LIKE ''将永远不会返回任何行

您需要使用is nullis not nullCoalesce

答案 3 :(得分:0)

一位同事和我做了大量的研究,这是我们提出的可行的方法。任何想法为什么有效而不是其他人?

Select * from teleapp where nvl(cashwithappyn,'U') = 'U';