SqlServer将⼀列字段拼接成字符串⽅法
最近在项⽬中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进⾏拼接显然不是最好的⽅法,所以想着能否在数据读取的时候直接拼接好返回,⽹上搜了可通过for xml来实现。
⾸先,准备好需要的数据,脚本如下:
if exists (select*from sysObjects where id=object_id('Student'))
drop table Student
go
create table Student
(
Id int,
Name varchar(20)
)
go
insert into Student values(1,'张三');
insert into Student values(2,'李四');
insert into Student values(3,'王五');
字段字符串去重复 当前表中数据如下:
需要将Name以“张三;李四;王五”格式显⽰。
具体通过实现如下:
select stuff((
select';'+name
from Student for xml path('')),1,1,'') as name
乍⼀看,是不是有点迷糊,不急,下⾯我们⼀⼀道来。
上⾯语句我们分为两部分来看,⾸先要明⽩for xml path的⽤法,在SQL SERVER中我们有很多⽅法读取XML字段中的⽚段,反过来SQL SERVER也允许我们将表数据以XML⽅式显⽰,for xml path便是以xml显⽰的⼀种⽅式。
select ';'+name
from Student for xml path('')
这段代码就是告诉数据库服务器要将⽣成的XML中name值以“;”⽅式进⾏拼接。
更多可参考:
其次,我们理解stuff函数的⽤法,通过上述代码拼接⽣成的内容为“;张三;李四;王五”,显然最前的“;”是多余的,所以我们通过stuff来去除。
STUFF(string,insert position,delete count,string inserted)函数是将⼀个字符串插⼊到另⼀个字符串中。插⼊时,插⼊的字符串可能删除指定数量的字符。
第⼀个参数string,指的就是你要操作的内容,可以是⼀个固定字符串,也可以指定为某列;
第⼆个参数insert position,指插⼊开始位置,SQLSERVER中默认是从1开始,⽽⾮从0开始;
第三个参数delete count,指的是要删除的字符个数,从position删除指定的个数,如果count为0表⽰不删除;
第四个参数string inserted,表⽰要插⼊的字符串;
eg:select stuff('abcdefg',3,2,'123')
结果:ab123efg
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论