在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串联起来去作为检测条件。
时间: 2024-10-19 14:06:00