1. 程式人生 > >SQL Server 通過SQL語句將查詢結果集拼接成字串

SQL Server 通過SQL語句將查詢結果集拼接成字串

首先,我們要了解一下兩個SQL語法

1. FOR XML PATH
FOR XML PATH 可以將查詢結果根據行輸出成XML各式

SELECT USER_ID FROM test FOR XML PATH

表結構:
這裡寫圖片描述
執行結果:

<row>
  <USER_ID>1</USER_ID>
</row>
<row>
  <USER_ID>2</USER_ID>
</row>
......

我們可以通過賦值引數修改行節點的名稱,通過AS修改列節點

SELECT USER_ID AS user_num FROM
test FOR XML PATH('test')

執行結果:

<!-- 行節點 -->
<test>
  <!-- 列節點 -->
  <user_num>1</user_num>
</test>
<test>
  <user_num>2</user_num>
</test>
......

而當FOR XML PATH(’’)時就可以去除行節點

SELECT USER_ID FROM test FOR XML PATH('')

執行結果:

<USER_ID>1</
USER_ID
>
<USER_ID>2</USER_ID> ......

修改列節點樣式

SELECT ',' + USER_ID FROM test FOR XML PATH('')

執行結果:

,1,2,......

到這裡我們就已經有了一個字符集拼接的雛形了

**2. STUFF函式 **
STUFF ( character_expression , start , length ,replaceWith_expression)
刪除指定長度的字元,並在指定的起點處插入另一組字元

引數 說 明
character_expression 由字元資料組成的表示式。character_expression 可以是常量、變數,也可以是字元或二進位制資料的列。
start 整形值,指定刪除和插入的開始位置。如果 start 或 length 是負數,則返回空字串。如果 start 比第一個 character_expression 長,則返回空字串。
length 整形值,指定要刪除的字元數。如果 length 比第一個 character_expression 長,則最多刪除到最後一個 character_expression 中的最後一個字元。
replaceWith_expression 用於替換的字串

由此,我們就可以利用STUFF函式替換掉FOR XML PATH處理所得執行結果的第一個“,”

3. 結合

SELECT STUFF((SELECT ',' + USER_ID FROM test for xml path('')),1,1,'');

執行結果:

1,2,......