SQL: STUFF()和FOR XML PATH的使用

STUFF(param1, startIndex, length, param2)


将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。

示例:

select STUFF('abcdefg',1,0,'1234')       --结果为'1234abcdefg'  
select STUFF('abcdefg',1,1,'1234')       --结果为'1234bcdefg'

for xml path         

将查询结果集以XML形式展现

示例:

假设有个表存放着学生的选课情况(stu_courses): 

select stu_name,stu_course from stu_courses for xml path;

<row>
<stu_name>张三</stu_name>
<stu_course>语文</stu_course>
</row>
<row>
<stu_name>张三</stu_name>
<stu_course>数学</stu_course>
</row>
<row>
<stu_name>张三</stu_name>
<stu_course>英语</stu_course>
</row>
<row>
<stu_name>李四</stu_name>
<stu_course>数学</stu_course>
</row>
<row>
<stu_name>李四</stu_name>
<stu_course>语文</stu_course>
</row>

for xml path('');         去掉每一行的<row></row>

示例:

select  stu_course from stu_courses for xml path;

<row>语文</row>
<row>数学</row>
<row>英语</row>

select  ,stu_course from stu_courses for xml path;

<row>,语文</row>
<row>,数学</row>
<row>,英语</row>

select  ,stu_course from stu_courses for xml path('');

,语文,数学,英语

stuff与for xml path('')联合使用 

select stuff(( select  ,stu_course from stu_courses for xml path('')),1,1,'');

加stuff是为了去掉第一个逗号

语文,数学,英语

 示例:将一个表的一个列的多行内容拼接成一行

结合group by

select stu_name,stuff(( select  ,stu_course from stu_courses for xml path('')),1,1,'') from stu_courses group by stu_name;

张三     语文,数学,英语
李四     语文,数学

扩展:

当用FOR XML PATH('')拼接内容,出现特殊字符如&<>时会出现乱码,

以下SQL可解决特殊字符乱码问题,nvarchr是避免中文乱码

FOR XML PATH(''),type).value('.','nvarchar(max)'), 1, 1, '')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值