今儿写sql的时候又碰见列转字符串的问题,遇见了几百次,每次遇见都要百度一下,在这里稍微记一下看能不能加深一下印象。
需求:将sql查询出来的某一列以固定的分隔方式组成一个字符串
例:
比如有这样一张表
现在需要查询出来的结果为 name:"张三,李四,王五"
sql server:
select stuff((
select';'+name
from Student for xml path('')),1,1,'') as name
解:在这里需要两个方法的使用,一种是sql server中 “for xml path”
在SQL SERVER中我们有很多方法读取XML字段中的片段,反过来SQL SERVER也允许我们将表数据以XML方式显示,for xml path便是以xml显示的一种方式。
select ','+name
from Student for xml path('')
这段代码就是告诉数据库服务器要将生成的XML中name值以“,”方式进行拼接。
更多可参考:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html
这段代码拼接出来的结果字符串前面会多出一个没必要的分号,这个时候我们就要用到
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
网友评论