我遇到了一些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中没有任何内容的所有行。
有什么想法吗?请帮助,这是我被指派做的项目的最后一部分,我只需要弄明白。
感谢。
答案 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 NULL
。 NULL
不是这样的值,这就是比较永远不会起作用的原因。
答案 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 null
,is not null
或Coalesce
答案 3 :(得分:0)
一位同事和我做了大量的研究,这是我们提出的可行的方法。任何想法为什么有效而不是其他人?
Select * from teleapp where nvl(cashwithappyn,'U') = 'U';