USE TSQL2012
GO
SELECT custid, country, region, city,
country + COALESCE(N''+ region, N'') + N',' + city AS location
FROM Sales.Customers
上述我们可以看到,我们通过COALESCE函数来对NULL用空字符串来代替进行处理。SQL 2012也引入了CONCAT函数来接收一个要连接的输入列表并自动以空字符串替换NULL,上述同样可以用CONCAT函数来代替。
USE TSQL2012
GO
SELECT custid, country, region, city,
country + CONCAT(country,N''+ region, N',' + city) AS location
FROM Sales.Customers同时我们看到下图知道,CONCAT函数参数至少要有两个:

msdn对CONCAT函数解释为:CONCAT 采用可变数量的字符串参数,并将它们串联成单个字符串。 它需要至少两个输入值;否则将引发错误。 所有参数都隐式转换为字符串类型,然后串联在一起。 Null 值被隐式转换为空字符串。 如果所有参数都为 Null,则返回 varchar(1) 类型的空字符串。 隐式转换为字符串的过程遵循现有的数据类型转换规则。
我们继续回到COALESCE函数,主要看看它与ISNULL函数的区别。
COALESCE与ISNULL函数探讨
可能有些人认为ISNULL比COALESCE函数更快,或者有人认为ISNULL和COALESCE函数是等同,更有人认为应该倾向于使用COALESCE函数,因为它是 ANSI SQL标准函数。认为归认为,那么两者到底有何不同呢,我们一起来看下。
(1)COALESCE和ISNULL处理数据类型优先不同
COALESCE函数决定类型输出基于数据类型优先【data type precedence】,所以如下在处理INT时,DATETIME优先级高于INT。
DECLARE @int INT, @datetime DATETIME;
SELECT COALESCE(@datetime, 0);
SELECT COALESCE(@int, CURRENT_TIMESTAMP);
而对于ISNULL函数,数据类型不受数据类型优先影响,而是通过函数参数列表第一项影响,ISNULL在于交换而COALESCE在于所有参数查询的合并。
DECLARE @int INT, @datetime DATETIME;
SELECT ISNULL(@datetime, 0);
我们看看进行如下操作会如何
DECLARE @int INT, @datetime DATETIME;
SELECT ISNULL(@int, CURRENT_TIMESTAMP);










