健康保健知识sqlrver把SELECT结果集中⼀列的所有的值⽤逗号隔开放进
⼀个字段内
⾸先我们有⼀个表 查询结果如下:
现在我们想要把USER_NAME这⼀列的内容 放到⼀个字段⾥⾯去:
⼀⾏sql语句解决问题:
1SELECT STUFF(( SELECT','+convert(VARCHAR, USER_NAME) FROM TE_USER FOR XML PATH('')), 1, 1, '') AS UrName
解释⼀下上⾯这条语句:
1,⾸先STUFF函数在上⾯的语句⾥的作⽤是去除拼接的字符串最前⾯的逗号
STUFF函数的⽤法⼤概是STUFF(param1, startIndex, length, param2) 意思是将param1中⾃startIndex(SQL中都是从1开始 ⽽⾮0)起 删除length个字符 然后⽤param2替换删掉的字符 具体⽤法请⾃⾏百度
2,重点说⼀下 FOR XML PATH:
执⾏SELECT * FROM TE_USER FOR XML PATH语句得到的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15<row>
<USER_ID>1</USER_ID>
<USER_NAME>张三</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> </row>
<row>
<USER_ID>2</USER_ID>
<USER_NAME>李四</USER_NAME>百步穿杨
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> </row>
<row>
<USER_ID>3</USER_ID>
日本的大学排名<USER_NAME>王五</USER_NAME>
大虾怎么做最好吃
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> </row>脑筋急转弯儿
看得出来 是把sql执⾏的结果转换成xml格式了
我们再来执⾏⼀下下⾯这条sql SELECT * FROM TE_USER FOR XML PATH('ABC')少儿英语口语启蒙
1 2 3<ABC>
<USER_ID>1</USER_ID>
<USER_NAME>张三</USER_NAME>
4 5 6 7 8 9 10 11 12 13 14 15 <USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> </ABC>
<ABC>
<USER_ID>2</USER_ID>
斑驳陆离的意思<USER_NAME>李四</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> </ABC>
<ABC>
<USER_ID>3</USER_ID>
<USER_NAME>王五</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> </ABC>
发现xml的row节点变成我们⾃定义的ABC了 那么我们如果⽤ FOR XML PATH('') 就代表把节点变为空了:
1 2 3 4 5 6 7 8 9<USER_ID>1</USER_ID>
<USER_NAME>张三</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> <USER_ID>2</USER_ID>
<USER_NAME>李四</USER_NAME>
<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD> <USER_ID>3</USER_ID>
<USER_NAME>王五</USER_NAME>
就业岗位<USER_PASSWORD>c4ca4238a0b923820dcc509a6f75849b</USER_PASSWORD>
把节点变空了以后 我们执⾏SELECT ',' +convert(VARCHAR, USER_NAME) FROM TE_USER FOR XML PATH('') 语句 结果: ,张三,李四,王五
这就实现了USER_NAME这⼀列的值取出来拼接到⼀起了 再⽤我们上⾯说的STUFF函数把最前⾯的逗号去掉 就可以了。
以上。