背景
我正在处理遗留的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。
问题:
答案 0 :(得分:3)
name
列中没有NULL,您已通过第一次查询验证了这一点。
name = ''
条件匹配空字符串和空格字符串。
当name
为空时,SUBSTRING(name, 1, 1)
也为空,ASCII
的参数也是如此。在这种情况下,ASCII
返回NULL。当name
是一个空格字符串时,提供给ASCII
的参数是一个空格,因此结果是32
,即空格字符的ASCII码。