sql - 使用 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。
解决方案
从 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)
推荐阅读
- html - 视频上的 Firefox 混合模式错误 (mac)
- vb.net - 通过 VLAN 发送短信
- python - 如何将平均线添加到 seaborn stripplot 或 swarmplot
- tensorflow - 具有未知形状输入的自定义 Keras 损失函数
- webview - 在 Kotlin Android 中阅读 webview 内容
- c# - 是否可以在事件查看器中使用 ETW 登录到子文件夹时使用自定义名称创建事件通道?
- c# - 如何在asp.net web api中将图像路径转换为http url?
- python - TypeError: unhashable type: 'set' in Flask Form 上传文件
- javascript - 如果表单已验证,如何转到另一个 HTML 页面,如果未验证,如何留在同一页面?
- sqlite - “INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL”是否保证是“rowid”的别名?