SQL Server串联忽略空值

时间:2018-11-08 09:55:22

标签: sql sql-server tsql 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

使用上面的代码,即使@item1@item2都为NULL值时,它也可以很好地工作,但是如果@item3为NULL值,则会有一个问题,它会有一个逗号( ,)最后,

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

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

我知道这是因为我在NULLIF@item1的{​​{1}}语句上硬编码了逗号,但是我想不出还有其他更好的方法去做这个。

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

2 个答案:

答案 0 :(得分:5)

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

STUFF(CONCAT(',' + NULLIF(@item1, ''),',' + NULLIF(@item2, ''),',' + NULLIF(@item3, '')),1,1,'')

答案 1 :(得分:0)

在这里您可以使用concat运算符, 对于第一个变量,不要传递concat分隔符,从第二个变量开始,请在变量之前传递concat变量(分隔符)...

if(typeof(data.options) !== 'undefined')
  //do something e.g: check if data.options.length != 0