把一列数据拼接成一个字符串比较简单: declare @test varchar(500) set @test=''; select @test=@test+name+',' from person select @test 但是如果数据中有重复选项,想去掉重复的就比较绕弯了. ) set @test=''; select distinct @test=@test+name+',' from person select @test 加distinct是不行的,我在sql server 2008
结论 先说结论,可以使用group_concat group by的组合实现多行变一行,将一个字段的多个类型串成一个字段 需求: 如题,一个字段如电影类别,一部电影可以是多个类别,如喜剧.动作片等,其形式可以是这样的1::Toy Story (1995)::Animation|Children's|Comedy 字段分别为id,电影名称,电影类别 现有一表cour_info,存储课程与专业的关系,而课程与专业是一对多关系,即一个KCMC可以对应多个major,现在需要将major字段处理为电影类
stuff(select ',' + fieldname from tablename for xml path('')),1,1,'') 这一整句的作用是将多行fieldname字段的内容串联起来,用逗号分隔.例如表fieldname-----------AAABBBCCC串联之后就是字符串: AAA,BBB,CCCfor xml path是SQL Server 2005以后版本支持的一种生成XML的方式.具体如何使用,请参考联机丛书.stuff函数的作用是去掉字符串最前面的逗号分隔符. --
数组字符串(阵列元件与字符串连接) var a, b; a = new Array(0,1,2,3,4); b = a.join("-"); 字符串转数组(根据一个字符串被分成多个串,并返回一个数组) var s = "abc,abcd,aaa"; ss = s.split(",");// 在每一个逗号(,)分解部. 版权声明:本文博客原创文章,博客,未经同意,不得转载.
当使用:SELECT ','+Id FROM dbo.Test FOR XML PATH('')); //这样读取的数据虽然是1,2,3,4,但是仍然是xml格式,所以当数据超过2033时候,用sqldatereader或者sqldateadapter读取数据会截断xml文件. 此时要:SELECT STUFF((SELECT ','+Id FROM dbo.Test FOR XML PATH('')),1,1,'');//利用stuff函数将xml文件转换为一个字符串字段.就不会截断.
11g里面用listagg: select listagg(name,',') within (order by id) from table 10g里面用wm_concat:select wm_concat(name) from table wm_concat是undocument的listagg是11g document的
) SET @resultstr='' SELECT @resultstr=@resultstr+'|'+[BaseImage] FROM dbo.life_fc PRINT @resultstr 示例2 ),),),) SET @imgColleciton='' SELECT @citcode=BaseCityCode FROM dbo.life_fc SELECT @type= BaseTypeID FROM dbo.life_fc SELECT @imgColleciton=@imgCol
declare @test table( name varchar(10)) insert into @test values('a') insert into @test values('b') insert into @test values('c') insert into @test values('d') SELECT * FROM @test select distinct (select cast(name AS varchar(2))+','from @test for xml