在sql语句中使用 xml for path 格式化字符串的方法总结

时间:2021-08-24 05:17:07

此方法实现的是将查询表中的某个字段,格式化成  字符串1,字符串2,字符串3...的格式

假设我们现在有两个表 分别是 分组表 grouped和分组成员表 groupuser

grouped表有连个字段 id ,groupname

groupuser表有id,groupid,userid,username 四个字段

两个表存储的是每一个分组下,对应的成员都有谁

分组表
id groupname
group1 科研小组
group2 审计小组
分组成员表
id groupid  userid  username
1 group1 userid1 用户1
2 group1 userid3 用户3

查询的结果是查出来科研小组中成员的名字,名字用逗号分隔。

查询的方法1

select UserName+',' FROM dbo.groupuser WHERE groupID='group1' FOR XML PATH('')

查询结果是:“用户1,用户3,“

可是我们的要求是最后的一个逗号要去掉,这个时候其实就是处理字符串了,方法有很多,比如使用substring()函数,将最后一个逗号去掉,要使用此方法,我们就得指标这个字符串的长度,使用sql中的len()函数即可,但是这样多查询了一步,有没有什么更简单的方法呢?

经过测试,笔者发现了一种方法:

select stuff((SELECT ','+UserName FROM groupuser WHERE [groupID]='group1' FOR XML PATH('')),1,1,'') 

这样,我们起初在格式化查询结果的时候,将逗号放到名字的左边,结果是 “,用户1,用户3“

这样我们只需要将字符中的第一个字符替换为空就行了,这个处理起来就简单多了。不需要计算长度,省去了一步查询,查询效率上也会提高。

如果有什么更好的方法,欢迎在讨论区讨论。大家讨论技术,共同成长。