SQL 合并行,返回带分隔字符的字符串
2010-05-05 16:13
337 查看
开发中,我们可能需要将同一个字段对应多行的值以字符串形式输出.并且用分隔符分隔各行的值.
T_Student 表
执行:
--declare @out nvarchar(100)
--exec proUniteRow 'T_Student','Name','Sex=男','_',',','Stud_ID asc',@out output
--print @out
--结果:_Tom,_Jack,_Mike
方法:
--合并行,并返回合并的值
Create proc [dbo].[proUniteRow]
@tab varchar(30), --表名
@col varchar(30), --合并的列名
@where varchar(2000), --合并的条件
@firstSplit varchar(100), --连接字符前缀
@lastSplit varchar(100), --连接字符后缀
@order varchar(100), --排序
@val nvarchar(2000)='' output –返回值
as
begin
declare @sql nvarchar(2000)
set @sql='
declare @retStr varchar(2000)
set @retStr=''''
declare cur cursor
read_only
for select
'+@col+' from '+@tab
if len(@where)>0
set @sql=@sql+' where '+@where
if len(@order)>0
set @sql=@sql+' order by '+@order
set @sql=@sql+'
declare @str varchar(2000)
open cur
fetch next from cur into @str
while (@@fetch_status =0)
begin
set @retStr=@retStr+'''+@firstSplit+'''+@str+'''+@lastSplit+'''
fetch next from cur into @str
end
close cur
deallocate cur
if len(@retStr)>0
set @strEnd=substring(@retStr,1,len(@retStr)-1)
'
exec sp_executesql @sql,N'@strEnd nvarchar(2000) output',@val output
end
T_Student 表
Stud_ID | Sex | Name |
1 | 男 | Tom |
2 | 女 | Anne |
3 | 男 | Jack |
4 | 男 | Mike |
--declare @out nvarchar(100)
--exec proUniteRow 'T_Student','Name','Sex=男','_',',','Stud_ID asc',@out output
--print @out
--结果:_Tom,_Jack,_Mike
方法:
--合并行,并返回合并的值
Create proc [dbo].[proUniteRow]
@tab varchar(30), --表名
@col varchar(30), --合并的列名
@where varchar(2000), --合并的条件
@firstSplit varchar(100), --连接字符前缀
@lastSplit varchar(100), --连接字符后缀
@order varchar(100), --排序
@val nvarchar(2000)='' output –返回值
as
begin
declare @sql nvarchar(2000)
set @sql='
declare @retStr varchar(2000)
set @retStr=''''
declare cur cursor
read_only
for select
'+@col+' from '+@tab
if len(@where)>0
set @sql=@sql+' where '+@where
if len(@order)>0
set @sql=@sql+' order by '+@order
set @sql=@sql+'
declare @str varchar(2000)
open cur
fetch next from cur into @str
while (@@fetch_status =0)
begin
set @retStr=@retStr+'''+@firstSplit+'''+@str+'''+@lastSplit+'''
fetch next from cur into @str
end
close cur
deallocate cur
if len(@retStr)>0
set @strEnd=substring(@retStr,1,len(@retStr)-1)
'
exec sp_executesql @sql,N'@strEnd nvarchar(2000) output',@val output
end
相关文章推荐
- 使用SQL如何把用逗号等字符隔开的字符串转换成列表,以及把列合并成符合隔开的字符串(转)
- SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
- 分组字符合并SQL语句 按某字段合并字符串之一(简单合并)
- 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
- 合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。
- sql语句实现返回某一字符串中出现某一字符的次数
- SQL两列字段合并为一个字符串,尾部加字符
- 合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。
- 一个扩展后的Split方法,可根据字符串分隔字符,返回字符数组
- 经典的sql语句,将返回结果合并为一个字符串
- ORACLE(PL/SQL) 根据字符分割(SPLIT)字符串返回数组
- 合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。 如: s1集合{“while”,”for”,”switch”,”if”,”continue”
- SQL:将字符串以特定字符分割并返回Table
- sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符
- SQL返回逗号分隔字符串或者其它符号
- 16、2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:
- sql计算字符串中包含中文、英文字符长度
- 删除SQL表中某字段字符为空,Null,零长度字符串,将删除记录
- 基本字符串压缩 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- sql中将分隔字符串转为临时表的方法