----- -------
张三 1,2,3,4
李四 a,s,d,f,g
.......
如何将上面的结果集转为下面的结果集:
name value
----- -------
张三 1
张三 2
张三 3
张三 4
李四 a
李四 s
李四 d
李四 f
李四 g
分隔字段
最新推荐文章于 2024-03-03 13:12:40 发布
本文介绍了一种在SQL中将单行的逗号分隔值转换为多行记录的方法,适用于2000/2005及更高版本的数据库环境。通过使用不同版本的SQL Server特性,如spt_values表和XML解析功能,实现快速的数据拆分。
name value
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

8775

被折叠的 条评论
为什么被折叠?



