首页 > 解决方案 > 使用 ISNULL 连接列后删除尾随逗号

问题描述

我使用 ISNULL 组合了来自多个列的值,因为某些列具有空值,但它似乎也创建了尾逗号,我想摆脱它们。

Country       Score1    Score2    Score3
USA             3         2        5
FRA             2        Null      Null
GER             4         5        Null

我将分数列合并为一个,它有尾随逗号。

select ISNULL(Score1,null) +','+ISNULL(Score2,'') +','+ISNULL(Score3,'') As Score
from table 

结果表如下所示

Country       Score    
USA           3,2,5         
FRA             2,,       
GER            4,5,       

我如何摆脱这些逗号?我正在使用 SQL Server。

标签: sqlsql-server

解决方案


从 SQL Server 2017 开始,您可以使用CONCAT_WS()

SELECT Country, CONCAT_WS(',', Score1, Score2, Score3) AS Score
FROM (VALUES
   ('USA', 3, 2,    5),
   ('FRA', 2, Null, Null),
   ('GER', 4, 5,    Null)
) v (Country,  Score1, Score2, Score3)

结果:

Country Score
USA     3,2,5
FRA     2
GER     4,5

但是,如果您想使用ISNULL(),以下语句也是一个选项(适用于所有支持的版本):

SELECT 
   Country, 
   STUFF(
      ISNULL(',' + CONVERT(varchar(1), Score1), '') +
      ISNULL(',' + CONVERT(varchar(1), Score2), '') +
      ISNULL(',' + CONVERT(varchar(1), Score3), ''),
      1, 1, ''
   ) AS Score
FROM (VALUES
   ('USA', 3, 2,    5),
   ('FRA', 2, Null, Null),
   ('GER', 4, 5,    Null)
) v (Country,  Score1, Score2, Score3)

推荐阅读