仅当列不为null时,SQL Server串联由逗号分隔

时间:2017-11-08 20:38:26

标签: sql-server string string-concatenation

我有以下SQL语句:

@All = COALESCE(NULLIF(@Asc1, '') + ',', '') +
        OALESCE(NULLIF(@Asc2, '') + ',', '') +
        OALESCE(NULLIF(@Asc3, '') + ',', '');

即使任何变量(@Asc1@Asc2@Asc3)具有NULL值或空值,也会在末尾插入逗号。

例如:

  • 如果@Asc1 = 1234@Asc2 = 3456以及@Asc3 = '',那么@All将最终成为1234,3456,

我希望@All成为1234,3456

感谢。

2 个答案:

答案 0 :(得分:4)

使用stuff()删除第一个逗号并撤消逗号连接:

set @all = stuff(
    coalesce(','+nullif(@Asc1, ''), '')
  + coalesce(','+nullif(@Asc2, ''), '')
  + coalesce(','+nullif(@Asc3, ''), '')
  ,1,1,'');

rextester演示:http://rextester.com/UNDS90887

返回:1234,3456

答案 1 :(得分:0)

我知道这篇文章已经回答并且是正确的。但是想发布以下答案,因为从SQL Server 2017开始,这太容易了,someoen可能会发现这对将来有用。

SELECT @all = CONCAT_WS(',',@Asc1,@Asc2,@Asc3)