微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分拆列值整理1

--分拆列值(1)

--

--原著:邹建

--整理于2009-03-09 17:21:25.793 by select left('claro',2)

--Microsoft sql Server 2005 - 9.00.3042.00

-- (Intel X86)   Feb  9 2007 22:47:07   copyright (c) 1988-2005

-- Microsoft Corporation  Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

 

--有表tb,如下:

/*

id          value

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

1          aa,bb

2          aaa,bbb,ccc

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

id          value

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

1          aa

1          bb

2          aaa

2          bbb

2          ccc

--                */

/*******

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

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

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

GO

DROP TABLE tb

GO

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

GO

DROP TABLE #

*******/

 

-->1. (sql server 2000)

 

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

FROM tb A, # B

WHERE SUBSTRING(',' + A.[value], 1) = ','

/*

id  value

1   aa

1   bb

2   aaa

2   bbb

2   ccc

*/

 

-->2. (sql server 2005)

 

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

 

/*

id  value

1   aa

1   bb

2   aaa

2   bbb

2   ccc

*/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐