我有一张表,其中某些行有一些空白cells
。我尝试使用IS NULL函数选择这样的行。但查询选择0行。
select * from zzz_fkp_registration_female where fname is null;
(0 row(s) affected)
现在我将查询更改为:
select * from zzz_fkp_registration_female where fname is null or fname ='';
我得到了理想的结果。
为什么IS NULL没有给出结果?由于单元格为空,IS NULL
和''
之间有什么区别。请解释一下。
答案 0 :(得分:13)
它们之间存在一些差异:
NULL
可以分配给任何类型,而不是与日期/数字字段不兼容的空字符串。NULL
是一个UNKNOWN值,它没有值而不是空字符串,这是一个值,但是空值。NULL
不应该捕获内存而不是空字符串。null = null
将导致null
而不是''=''
,这将导致TRUE
。答案 1 :(得分:2)
Null缺少值。空字符串是一个值,但只是空的。
Null对数据库来说是特殊的。
通过使用NULL,您可以区分“put no data”和“put empty data”。
更多差异:
NULL的长度为NULL,空字符串的LENGTH为0。 NULL在空字符串之前排序。 COUNT(消息)将计算空字符串但不计算NULL 您可以使用绑定变量搜索空字符串,但不能搜索NULL。这个查询:
SELECT *
FROM mytable
WHERE mytext = ?
永远不会匹配mytext中的NULL,无论您从客户端传递什么值。要匹配NULL,您必须使用其他查询
SELECT *
FROM mytable
WHERE mytext IS NULL
答案 2 :(得分:1)
他找不到NULL,因为它没有值
空字符串是一个值,但它是空的。
只有它的值可以与其他值进行比较
答案 3 :(得分:1)
您可以按如下方式修改查询:
select * from zzz_fkp_registration_female where isnull(fname,'') = '';
此查询将导致所有空白单元格以及具有空值的单元格。
注意:
答案 4 :(得分:0)
这是因为包含NULL的单元格和一个空单元格是两个不同的东西。 即-> NULL与“或”不同。