我有一个表,其中一些行有一些空白的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
和''
的区别是什么,因为单元格是空的。请解释。
它们之间的一些区别:
-
NULL
可以分配给任何类型,而不是空字符串,这将不兼容日期/数字字段。 -
NULL
是一个未知值,它没有一个值,而不是一个空字符串,这是一个值,但空的一个。 - 据我所知,
NULL
不应该捕获内存,而不是一个空字符串。 -
null = null
将导致null
,而''=''
将导致TRUE
。
您可以将您的查询修改如下:
select * from zzz_fkp_registration_female where isnull(fname,'') = '';
此查询将产生所有空白单元格以及空值单元格。
注意:
- NULL值表示缺失未知数据。
- 空白数据是输入时作为空白输入的实际数据。
-
Null表示没有值。空字符串是一个值,但只是空的。
-
Null是数据库的特殊值
- Null没有边界,它可以用于数据库中的字符串、整数、日期等字段。
- NULL没有分配任何内存,NULL值的字符串只是一个指针,它指向内存中的任何地方。然而,Empty被分配给一个内存位置,尽管存储在内存中的值是"。
使用NULL可以区分"put no data"one_answers"put empty data"。
更多差异:
LENGTH为NULL为NULL, LENGTH为空字符串为0。null在空字符串之前排序。COUNT(message)将计算空字符串,但不计算null您可以使用绑定变量搜索空字符串,但不能搜索NULL。这个查询:
SELECT *
FROM mytable
WHERE mytext = ?
永远不会匹配mytext中的NULL,无论您从客户端传递的值是什么。要匹配null,必须使用其他查询
SELECT *
FROM mytable
WHERE mytext IS NULL
他找不到NULL,因为它没有值
空字符串是一个值,但它是空的。
只有当它是一个值,它才能与另一个值比较
这是因为包含NULL的单元格和空单元格是两种不同的东西。即零不一样。->"或"。