TSQL中的COALESCE函数

有人可以解释TSQL中的COALESCE函数是如何工作的吗? 语法如下

COALESCE(x,y)

这个函数的MSDN文档非常含糊

有人告诉我说,联盟成本比ISNULL低,但是研究并没有表明这一点。 ISNULL只接受两个参数,该字段的值为NULL,如果计算结果为NULL,则返回所需的结果。 COALESCE将采取任何数量的参数,并返回遇到的第一个不是NULL的值。

这里有一个更详细的详细说明http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

我不知道你为什么认为文档是模糊的。

它只是遍历所有的参数,并返回第一个NOT NULL

 COALESCE(NULL, NULL, NULL, 1, 2, 3) => 1 COALESCE(1, 2, 3, 4, 5, NULL) => 1 COALESCE(NULL, NULL, NULL, 3, 2, NULL) => 3 COALESCE(6, 5, 4, 3, 2, NULL) => 6 COALESCE(NULL, NULL, NULL, NULL, NULL, NULL) => NULL 

它接受几乎任何数量的参数,但它们应该是相同的数据types。 (如果它们不是相同的数据types,则会使用数据types的优先顺序隐式转换为适当的数据types。)

这就像ISNULL()但对于多个参数,而不是两个。

这也是ANSI-SQL ,因为ISNULL()不是。

这里是我看着COALESCE的方式…希望这是有道理的…

以简单的forms…。

合并(FieldName,'空')

因此,这将转换为…如果“FieldName”为NULL,则填充字段值为“EMPTY”。

现在为多个值…

合并(FieldName1,FieldName2,Value2,Value3)

如果Fieldname1中的值为null,则使用Fieldname2中的值填充它,如果FieldName2为NULL,则填充Value2等。

AdventureWorks2012示例数据库的这段testing代码完美地工作,并提供了一个关于COALESCE如何工作的良好视觉解释:

 SELECT Name, Class, Color, ProductNumber, COALESCE(Class, Color, ProductNumber) AS FirstNotNull FROM Production.Product 

如果我们将FirstName,MiddleName和LastName列作为parameter passing给COALESCE()函数。 COALESCE()函数返回3列中的第一个非空值 。 请注意,这发生在表中的每一行。

 SELECT Id, COALESCE(FirstName, MiddleName, LastName) AS Name FROM tblEmployee 

除了ISNULL的替代之外,还有更多的合并。 我完全同意,合并的官方“文件”是模糊的,无益的。 这篇文章帮助了很多。 http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/

这是一个简单的查询包含coalesce –

 select * from person where coalesce(addressId, ContactId) is null. 

它将返回addressId和contactId都为空的人员。

合并function

  • 至less有两个参数。
  • 参数必须是整型。
  • 返回第一个非空参数。

例如

  • coalesce(null,1,2,3)将返回1。
  • coalesce(null,null)将返回null。