Llo*_*nks 107 sql t-sql sql-server sql-server-2008
有人能解释一下TSQL中的COALESCE功能是如何工作的吗?语法如下
COALESCE(x,y)
关于此功能的MSDN文档非常模糊
Mat*_*lie 212
我不确定你为什么认为这些文件很模糊.
它只是逐个遍历所有参数,并返回第一个参数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
Run Code Online (Sandbox Code Playgroud)
它接受几乎任意数量的参数,但它们应该是相同的数据类型. (如果它们不是相同的数据类型,则使用数据类型的优先顺序隐式转换为适当的数据类型.)
它就像是ISNULL()
多个参数,而不仅仅是两个.
它也是ANSI-SQL
,在哪里 - ISNULL()
不是.
小智 73
我被告知COALESCE比ISNULL便宜,但研究并未表明这一点.ISNULL只接受两个参数,即被评估为NULL的字段,以及如果它被评估为NULL所需的结果.COALESCE将接受任意数量的参数,并返回遇到的非NULL的第一个值.
这里有详细的描述 http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/
Joh*_*ski 18
这是我看COALESCE的方式......希望它有意义......
以简单的形式......
合并(FieldName,'Empty')
因此,这转换为...如果"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.Product
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
211406 次 |
最近记录: |