您的位置:首页 > 数据库

SQL经典代码---分拆列值

2008-12-17 11:35 330 查看
原著:邹建

改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-12-16 广东深圳

有表tb, 如下:

id value

----------- -----------

1 aa,bb

2 aaa,bbb,ccc

欲按id,分拆value列, 分拆后结果如下:

id value

----------- --------

1 aa

1 bb

2 aaa

2 bbb

2 ccc

1. 旧的解决方法(sql server 2000)

SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b

SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)

FROM tb A, # B

WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','

DROP TABLE #

2. 新的解决方法(sql server 2005)

create table tb(id int,value varchar(30))

insert into tb values(1,'aa,bb')

insert into tb values(2,'aaa,bbb,ccc')

go

SELECT A.id, B.value

FROM(

SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', ' </v> <v>') + ' </v> </root>') FROM tb

)A

OUTER APPLY(

SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)

)B

DROP TABLE tb

/*

id value

----------- ------------------------------

1 aa

1 bb

2 aaa

2 bbb

2 ccc

(5 行受影响)

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: