2016-11-17 86 views
3

我有一张表,其中一些行有一些空白cells。我试图用IS NULL函数选择这样的行。但查询选择0行。空字符串对NULL

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

在SQL NULL被定义为NULL和“”指的是一些空值 –

+0

“”空字符串:我们可以说没有任何价值。但是NULL意味着我们不能说没有价值。这意味着可能有价值,但它的未知。这就是NULL与空字符串不同的原因。 –

+0

不允许零长度的字符串作为名称(有一个约束或触发器)。在这种情况下使用NULL。 – jarlh

回答

3

它们之间的某些区别:

  • NULL可以分配给任何类型的,相对于其中将不与日期/数字字段兼容空字符串。
  • NULL是未知值,它不具有一个值,而不是一个空字符串,这是一个值,但空之一。
  • 据我所知,NULL不应该捕获内存而不是空字符串。
  • null = null将导致null而不是''=''这将导致TRUE
+0

我们如何使用空或空字符串分隔单元格? – nischalinn

+0

通过选择单元格IS NULL和单元='' – mansi

+0

你是什么意思分开? – sagi

0

他找不到NULL,因为它不具有价值

空字符串值,但其空。

只有当它能够与其他值进行比较的值

1

你可以有你的查询修改如下:

select * from zzz_fkp_registration_female where isnull(fname,'') = ''; 

这个查询将导致所有空白单元,以及与空值单元格。

注:

  1. NULL值表示缺少未知的数据。
  2. 空白数据是在输入过程中输入为空白的实际数据。
0
  • 空值是没有值。一个空字符串是一个值,但只是空的。

  • 空是特殊的数据库。

  • 空无边,它可用于字符串,整数,日期等的数据库字段。
  • NULL没有分配任何内存,NUll值的字符串只是一个指向内存中任何地方的指针。然而,虽然存储在内存中的值是“”,但空值被分配给内存位置。

通过使用NULL,您可以区分“put no data”和“put empty data”。

一些更差异:

NULL的长度为NULL,一个空字符串的长度为0的NULL 空字符串之前进行排序。 COUNT(消息)将计数空字符串,但不计数NULL 您可以使用绑定变量搜索空字符串,但不能为NULL。此查询:

SELECT * 
FROM mytable 
WHERE mytext = ? 

永远不会匹配mytext中的NULL,无论您从客户端传递什么值。要匹配的NULL,你将不得不使用其他查询

SELECT * FROM mytable WHERE mytext IS NULL