SQL Server连接忽略null值

Dea*_*ean 2 sql t-sql sql-server concatenation

我目前正在处理一个查询,它将多个列连接到1个字符串,并使用逗号(,)作为彼此之间的分隔符.我无法弄清楚如何处理空值.

DECLARE 
    @item1 nvarchar(max) = 'a',
    @item2 nvarchar(max) = 'b',
    @item3 nvarchar(max) = 'c'

SELECT CONCAT(
    ISNULL(NULLIF(@item1, '') + ', ', ''), 
    ISNULL(NULLIF(@item2, '') + ', ', ''), 
    ISNULL(NULLIF(@item3, ''), '')
)

--@item1 = 'a', @item2 = 'b', @item3 = 'c'
--Output : a, b, c

--@item1 = 'a', @item2 = NULL, @item3 = 'c'
--Output : a, c

--@item1 = NULL, @item2 = 'b', @item3 = 'c'
--Output : b, c
Run Code Online (Sandbox Code Playgroud)

有了它上面的代码效果很好,当@item1或者@item2甚至两者都是NULL值,但如果问题@item3是NULL值,这将在年底有一个额外的逗号(,),

--@item1 = 'a', @item2 = 'b', @item3 = NULL
--Output : a, b,

--@item1 = 'a', @item2 = NULL, @item3 = NULL
--Output : a,
Run Code Online (Sandbox Code Playgroud)

我知道这是因为我很难对编码的逗号(,)NULLIF语句@item1@item2,但我想不出有什么别的更好的办法来做到这一点.

对此问题有任何建议或更好的解决方案吗?

Lar*_*rnu 5

这个STUFF方法可能是更好的选择:

STUFF(CONCAT(',' + NULLIF(@item1, ''),',' + NULLIF(@item2, ''),',' + NULLIF(@item3, '')),1,1,'')
Run Code Online (Sandbox Code Playgroud)