1

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

Select * from teleapp;

我得到了很多结果。结果包括一列(称为 cashwithappyn),其中包含大量空或空数据单元格。(他们看起来很空,不说空)

栏目信息为:

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

4 回答 4

6

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

WHERE TRIM(CASHWITHAPYYN) IS NULL

TRIM删除之前和之后的所有空白,如果没有任何内容,则值变为NULL

例如

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

NULL不能相提并论,= NULL但必须措辞IS NULLNULL不是这样的值,这就是为什么比较永远不会起作用的原因。

于 2012-09-27T18:41:39.220 回答
5

您需要使用 IS NULL

Select * from teleapp where cashwithappyn is null;
于 2012-09-27T17:04:20.267 回答
4

带有 null 的逻辑测试表达式(=、Not In、Like 等)会导致错误,因此以下所有结果都会导致错误

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

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

您需要使用is null,is not nullCoalesce

于 2012-09-27T17:08:28.193 回答
0

我和一个同事做了很多研究,这就是我们想出的可行的方法。任何想法为什么这有效但其他无效?

Select * from teleapp where nvl(cashwithappyn,'U') = 'U';
于 2012-09-27T18:28:42.130 回答