sqlserver 把SELECT结果集中一列的所有的值 用逗号隔开放进一个字段内
首先我們有一個表 查詢結果如下:
現在我們想要把USER_NAME這一列的內容 放到一個字段里面去:
一行sql語句解決問題:
SELECT STUFF(( SELECT ',' +convert(VARCHAR, USER_NAME) FROM TE_USER FOR XML PATH('')), 1, 1, '') AS UserName?
解釋一下上面這條語句:
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語句得到的結果:
<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')
<ABC><USER_ID>1</USER_ID><USER_NAME>張三</USER_NAME><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('') 就代表把節點變為空了:
<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函數把最前面的逗號去掉 就可以了。
以上。
?
轉載于:https://www.cnblogs.com/blazeZzz/p/7359575.html
總結
以上是生活随笔為你收集整理的sqlserver 把SELECT结果集中一列的所有的值 用逗号隔开放进一个字段内的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无梦到徽州的上一句是什么意思
- 下一篇: 梦到茶杯碎了怎么回事