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,......
参考

1.灵活运用 SQL SERVER FOR XML PATH
2.SQL Server中的STUFF函数的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值