sqlserver 把SELECT結果集中一列的所有的值 用逗號隔開放進一個字段內

首先我們有一個表 查詢結果如下:

現在我們想要把USER_NAME這一列的內容 放到一個字段裏面去:

一行sql語句解決問題:

1

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語句得到的結果:

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

4

5

6

7

8

9

10

11

12

13

14

15

<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('') 就代表把節點變爲空了:

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函數把最前面的逗號去掉 就可以了。

以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章