我正在寻找等价于MySQL concat_ws的SQL Server,以便用分隔符连接字符串。我找不到一个,SQL服务器中是否有单一功能来实现这个任务?
答案 0 :(得分:11)
没有真正的等价物(即使参考的答案也不完全等同)。您通常会在每个值之间添加分隔符:
select A + ',' + B + . . .
一个主要区别是concat_ws()
将跳过NULL参数,但+
不会。您可以使用以下方法模拟此行为:
select stuff((coalesce(',' + A, '') + coalesce(',' + B, '') + . . .
), 1, 1, '')
当然,这不会像concat_ws()
那样将值转换为字符串。所以,更接近的版本是这样的:
select stuff((coalesce(',' + cast(A as varchar(255)), '') +
coalesce(',' + cast(B as varchar(255)), '') +
. . .
), 1, 1, '')
您可以对引用的答案应用相同的修补程序:
SELECT id,
STUFF((SELECT ';' + cast(v as varchar(255))
FROM (VALUES (a), (b), (c), (d)) AS v (v)
WHERE v is not null
FOR XML PATH (''), TYPE
).value('.[1]', 'varchar(max)'),
1, 1, ''
)
FROM foo
ORDER BY id;