SQL SERVER中Null和空串区别
一直以来对NULL和空串的区别搞不清楚。
?
空串的直观感受如下图:(通俗的讲,就是不显示NULL且是一片空白的东东)
?
而NULL的直观感受如下图:
?--------------------
?
区别一:
当你用SQL语句以上面这三个字段查询时,用的WHRE条件不一样。
1、查询空串
SQL语句:select * from talbe where BPAgent=''
?
而查询NULL
SQL语句:select * from talbe where ClCmtAccSbjtName is NULL.
?
下成从面向对象的角度来解释这一现象:
空串:其实是字符串的一种,你可以把它当成普通的字符串。我记得在.net中有这样一个常量,叫做String.Empty()。
这也可以从侧面证明空串只是一个普通的字符串,不过他是一个已经被实例化过的OBJECT。
?
NULL:它是一个OBJECT,不过还未被实例化。
?
好了,从上面来看,它们的本质区别就是一个已经被实例化,一个还未被实例化。
?
?
区别二:
从coalesce的用法也可以看得出来。
数据库的数据如下图:
?
1、比如想看BPAgent和CustomerId中第一个不为NULL的。
?
某人这样写:
select coalesce(BPAgent,CustomerId) from table。
它认为出来的应该是CustomerId.
然而出来的结果却是如下图:
?这是为什么呢?
从上面的分析就可以看出,SQL SERVER并不把空串当成NULL,它认为BPAgent就是一个不为NULL的字段。
?
正解:
select coalesce(ClCmtAccSbjtName?,CustomerId) from table。
此时出来的结果如下图:
?
--------------------------
好了,解释完毕。