在SQL中使用coalesce有什么用?

时间:2013-10-05 01:42:34

标签: sql sql-server-2008-r2

我是sql server的新手。我用Google搜索了coalesce,发现它是另一个替代ISNULL的词。

我在forum中发布了一段关于合并的不同用法的代码。

use adventureworks

DECLARE @DepartmentName VARCHAR(1000)

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' 
FROM HumanResources.Department
WHERE (GroupName = 'Executive General and Administration')

SELECT @DepartmentName AS DepartmentNames

将结果返回一行。

那么为什么sql默认情况下不支持字符串连接,如下面的.NET那样?

DECLARE @DepartmentName VARCHAR(1000)

    **SELECT @DepartmentName = @DepartmentName + Name + ';'**
    FROM HumanResources.Department
    WHERE (GroupName = 'Executive General and Administration')

    SELECT @DepartmentName AS DepartmentNames

在下面的行中使用coalesce是什么

SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' 

以及为什么

**SELECT @DepartmentName = @DepartmentName + Name + ';'**
    FROM HumanResources.Department
    WHERE (GroupName = 'Executive General and Administration')

无效?

4 个答案:

答案 0 :(得分:2)

coalesce只会在参数列表中返回第一个non-NULL参数的值。

e.g。

1.select coalesce(NULL,0,2,1);

将返回0,因为 0并不意味着空

2.select coalesce(id,emp_id,0) from tab1;

在这种情况下,如果属性为id,则会返回NOT NULL,否则emp_idNOT NULL emp_id将被返回,否则将返回0

在这种连接情况下,您只需使用+ - 运算符或concat() - 函数即可。但是,此处coalesce用于 DepartmentName=NULL 的情况,因为如果您使用 NULL 连接或执行某些操作,结果将是的 NULL 即可。因此,使用空白(即'')代替NULL coalesce()

在这种情况下,coalesce在宣布时DepartmentName被用作NULL coalesce。使用 Moho 在其答案中给出的语法替代{{1}}的使用。

答案 1 :(得分:0)

COALESCE()返回第一个非空术语。这段代码:

COALESCE(@DepartmentName,'') 

表示如果部门名称为空,则返回空白。

null与某些内容联系起来会产生null,因此如果您不使用COALESCE(),您也会失去name值。

答案 2 :(得分:0)

COALESCE从参数列表返回第一个不计算为NULL的表达式。

对于您的示例COALESCE(@DepartmentName,''),这意味着如果#DepartmentName为NULL,则应返回''(空字符串)。这是必需的,因为使用空值连接字符串将返回NULL。

SELECT'test'+ NULL - 将返回NULL

COALESCE (Transact-SQL)

答案 3 :(得分:0)

set @DepartmentName = ''之后添加DECLARE @DepartmentName VARCHAR(1000),您将不需要合并声明。

编辑:在评论为我澄清之后更新