具有空值的空列

时间:2014-11-10 16:22:37

标签: sql sql-server sql-server-2000

背景

我正在处理遗留的SQL Server 2000数据库(是的,我正在改变它!)。它有一个列,我们可以调用name,它是nvarchar(100)而不是null。我已经验证了这一点。

当我运行此查询时:

select name
from mytable
where name is null

我没有结果。但是,当我运行此查询时:

select name
from mytable
where name = ''

我得到大约100个结果。我想更多地了解这些空值,因为空格在非空列中是合法的,所以我运行了这个查询:

select ASCII(substring(name, 1, 1))
from s
where name = ''

这将返回" 32"大约三分之一的结果,即一个空间。但是对于其他2 / 3rds,它返回null。

问题:

  1. 如何在具有非空定义的列中存在空值?
  2. 为什么这些空值未出现在"名称中为空"查询?

1 个答案:

答案 0 :(得分:3)

name列中没有NULL,您已通过第一次查询验证了这一点。

name = ''条件匹配空字符串和空格字符串。

name为空时,SUBSTRING(name, 1, 1)也为空,ASCII的参数也是如此。在这种情况下,ASCII返回NULL。当name是一个空格字符串时,提供给ASCII的参数是一个空格,因此结果是32,即空格字符的ASCII码。