使用Coalesce为逗号分隔列表

时间:2013-07-22 20:40:40

标签: sql sql-server coalesce

Coalesce will return the first non-null value among its arguments文档说。我也可以像下面这样使用它:

DECLARE @ColumnValue VARCHAR(MAX);
SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
FROM dbo.TableA
SELECT @ColumnValue

根据我的理解,输出列表的最前面应该有一个,,因为从一开始,至少会有一个逗号作为参数传递。另外,如果我在第二个参数中加入一些值。它出现在最前面,而不是我预期的,

如果有人可以请我解释一下代码。我将非常感激。

2 个答案:

答案 0 :(得分:5)

您的理解不正确。

专注于表达:

SELECT @ColumnValue = COALESCE(@ColumnValue+',','') + ColumnValue
-------------------------------^XXXXXXXXXXXXXXX

COALESCE()的第一个参数是@ColumnValue+','。最初为NULL,因此它被''替换。然后ColumnValue作为列表中的第一个元素。

您可能会想:

SELECT @ColumnValue = COALESCE(@ColumnValue, '') + ',' + ColumnValue

答案 1 :(得分:5)

你很困惑。由于最初@ColumnValueNULL,因此@ColumnValue + ','的结果也为NULL,因此COALESCE(@ColumnValue+',','')的结果为''。这很容易测试:

DECLARE @ColumnValue VARCHAR(MAX);

SELECT COALESCE(@ColumnValue+',','')
相关问题