sql拼接同一字段_Sql Server将一列字段拼接成字符串方法

最近在项目中遇到个问题,需要将表中某列字段合并成字符串输出,如果直接通过代码全部读取出来,再遍历进行拼接显然不是最好的方法,所以想着能否在数据读取的时候直接拼接好返回,网上搜了可通过for xml来实现。

首先,准备好需要的数据,脚本如下:

if exists (select * from sysObjects where id=object_id('Student'))drop tableStudentgo

create tableStudent

(

Idint,

Namevarchar(20)

)go

insert into Student values(1,'张三');insert into Student values(2,'李四');insert into Student values(3,'王五');

当前表中数据如下:

需要将Name以“张三;李四;王五”格式显示。

具体通过实现如下:

select stuff((select ';'+namefrom 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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值