SQL Server连接忽略空值
我目前正在处理一个查询,该查询将多个列连接到一个字符串中,并使用逗号(,)作为分隔符。我不知道如何处理空值SQL Server连接忽略空值,sql,sql-server,tsql,concatenation,Sql,Sql Server,Tsql,Concatenation,我目前正在处理一个查询,该查询将多个列连接到一个字符串中,并使用逗号(,)作为分隔符。我不知道如何处理空值 DECLARE @item1 nvarchar(max) = 'a', @item2 nvarchar(max) = 'b', @item3 nvarchar(max) = 'c' SELECT CONCAT( ISNULL(NULLIF(@item1, '') + ', ', ''), ISNULL(NULLIF(@item2, '') +
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
都是空值时,它工作得很好,但如果@item3
为空值,则会有一个问题,它将在末尾有一个额外的逗号(,)
--@item1 = 'a', @item2 = 'b', @item3 = NULL
--Output : a, b,
--@item1 = 'a', @item2 = NULL, @item3 = NULL
--Output : a,
我知道这是因为我对@item1
和@item2
的NULLIF
语句中的逗号(,)进行了硬编码,但我想不出还有其他更好的方法
对于这个问题有什么建议或更好的解决方案吗?这里的
STUFF
方法可能是更好的选择:
STUFF(CONCAT(',' + NULLIF(@item1, ''),',' + NULLIF(@item2, ''),',' + NULLIF(@item3, '')),1,1,'')
这里可以使用concat操作符, 对于第一个变量,不要传递concat分隔符,从第二个变量开始,在变量之前传递concat变量(分隔符)…
declare @a varchar(10)='a'
declare @b varchar(10)='b'
declare @c varchar(10)=null
select isnull(@a,'')+isnull(','+@b,'')+isnull(','+@c,'')
请参阅,如果任何值的值为
'
或NULL
,则这不会返回OP想要的结果。