我目前正在处理一个查询,该查询将多个列连接到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}}语句上硬编码了逗号,但是我想不出还有其他更好的方法去做这个。
对此问题有何建议或更好的解决方案?
答案 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