有人能解释一下TSQL中的COALESCE函数是如何工作的吗?语法如下
合并(x,y)
关于此函数的MSDN文档相当模糊
发布于 2012-11-14 02:40:51
有人告诉我,COALESCE比ISNULL成本更低,但研究并没有表明这一点。ISNULL只接受两个参数,一个是被计算为NULL的字段,另一个是您想要的结果(如果它被计算为NULL )。COALESCE将接受任意数量的参数,并返回遇到的第一个非空的值。
这里有更详细的细节描述,http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/
发布于 2012-11-14 02:27:06
我不确定为什么你认为文档是模糊的。
它简单地逐个遍历所有参数,并返回第一个参数,即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它可以接受几乎任何数量的参数,但它们应该是相同的数据类型。(如果它们不是相同的数据类型,则使用_隐式地将它们转换为适当的数据类型
它类似于ISNULL(),但适用于多个参数,而不仅仅是两个参数。
它也是ANSI-SQL,而ISNULL()不是。
发布于 2013-09-24 03:43:39
这是我看待COALESCE...and的方式,希望它是有意义的。
在一个简单形式的…中。
空合并(FieldName,‘’)
因此,这可以转换为…如果"FieldName“为NULL,则使用"EMPTY”一词填充该字段值。
现在对于多个值。
合并(FieldName1、FieldName2、Value2、Value3)
如果Fieldname1中的值为null,则使用Fieldname2中的值填充它,如果FieldName2为NULL,则使用Value2填充它,依此类推。
AdventureWorks2012示例数据库的这段测试代码完美地工作,很好地直观地解释了COALESCE是如何工作的:
SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Producthttps://stackoverflow.com/questions/13366488
复制相似问题