在sql语句中使用 xml for path 格式化字符串的方法总结
此方法实现的是将查询表中的某个字段,格式化成 字符串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“
这样我们只需要将字符中的第一个字符替换为空就行了,这个处理起来就简单多了。不需要计算长度,省去了一步查询,查询效率上也会提高。
如果有什么更好的方法,欢迎在讨论区讨论。大家讨论技术,共同成长。