SQL Server 通過SQL語句將查詢結果集拼接成字串
阿新 • • 發佈:2019-01-08
首先,我們要了解一下兩個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,......