13 三种方式替换SQL Server中的NULL值(Different ways to replace NULL in Sql Server)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13 三种方式替换SQL Server中的NULL值(Different ways to replace NULL in Sql Server)相关的知识,希望对你有一定的参考价值。

在Sql Server中有三种方式对查询结果中的NULL值进行替换。

如有下面的一张表:

技术分享

我们可以通过自连接(Self-Join)的方式一张员工名和其对应的经理名的表:

SELECT E.[Name],M.[Name]
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

技术分享

我们可以看到,Todd对应的Manger为NULL,这说明Todd应该是公司的最高层,他没有经理。但是这样显示很不友好,我们希望如果Todd没有经理,那么他的经理名显示为“No Mnager”,如下图:

技术分享

文章开头已经提到了,有三种方式可以替换查询结果中的NULL值,下面我们分别介绍。

一)使用ISNULL()函数替换。

SELECT E.[Name],ISNULL(M.[Name],No Manager)
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

ISNULL()函数的第一个参数如果为NULL值,那么返回结果为第二个参数。

二)使用COALESCE()函数

SELECT E.[Name],COALESCE(M.[Name],No Manager)
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

大家可以看到,在我们的这个例子中ISNULL函数和COALESCE函数的使用方式是一样的。其实这两个函数是有区别的,其具体区别在接下来的文章中会介绍。

三)使用CASE WHEN THEN ELSE END语句

SELECT E.[Name],CASE WHEN M.[Name] IS NULL THEN No Manager ELSE M.[Name] END
  FROM [tblEmployee] AS E
LEFT JOIN [tblEmployee] AS M
ON E.ManagerId = M.EmployeeId

这个语句有点像C#等高级语言的if else if else if else... 语句。如果WHEN后的条件成立,则会去到THEN语句,反之去到ELSE语句。在SQL中可以有很多个WHEN THEN ELSE串联起来去作为检测条件。

 

以上是关于13 三种方式替换SQL Server中的NULL值(Different ways to replace NULL in Sql Server)的主要内容,如果未能解决你的问题,请参考以下文章

2017-3-13 SQL server 表连接

如何使LAG()在SQL Server中忽略NULL?

SQL Server:替换文本中的回车和换行符

SQL Server Join方式

SQL Server 中的 XML 列比较

如何将sql server 数据库表中的某一列的某一字符替换成需要的字符