分隔字段

本文介绍了一种在SQL中将单行的逗号分隔值转换为多行记录的方法,适用于2000/2005及更高版本的数据库环境。通过使用不同版本的SQL Server特性,如spt_values表和XML解析功能,实现快速的数据拆分。

name value
----- -------
张三 1,2,3,4
李四 a,s,d,f,g
.......

如何将上面的结果集转为下面的结果集:

name value
----- -------
张三 1
张三 2
张三 3
张三 4
李四 a
李四 s
李四 d
李四 f
李四 g
 
if object_id('tb') is not null drop table tb ---->建表 create table tb([name] varchar(4),[value] varchar(9)) insert tb select '张三','1,2,3,4' union all select '李四','a,s,d,f,g' --1.2000/2005通用方法 SELECT a.[name], [value]=SUBSTRING(a.[value],number,CHARINDEX(',',a.[value]+',',number)-b.number) FROM tb a JOIN master..spt_values b ON b.type='P' --AND SUBSTRING(','+a.col,b.number,1)=',' --用此条件或下面的条件均可 AND CHARINDEX(',',','+a.[value],number)=number --2.2005以上新方法: SELECT a.[name],b.[value] FROM (SELECT [name],[value]=CAST('<v>'+REPLACE([value],',','</v><v>')+'</v>' AS xml) FROM tb) a OUTER APPLY (SELECT [value]=T.C.value('.','varchar(50)') FROM a.[value].nodes('/v') AS T(C)) b --> 查询结果 SELECT * FROM tb --> 删除表格 DROP TABLE tb
 
  • 原贴地址:http://topic.csdn.net/u/20101119/17/44425d6e-ce9d-4e8e-9964-fd06cd8153f8.html?seed=297701062&r=70001530#r_70001530

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值