(转CSDN) 原文: http://topic.csdn.net/u/20071026/16/59d85356-ff06-44e9-8e01-e6e1869a8a30.html
--形式一:
CREATETABLE A(id INT,country VARCHAR(100))
INSERT A
SELECT1,'中国;日本;韩国'UNIONALL
SELECT2,'美国;意大利;法国'UNIONALL
SELECT3,'德国'
SELECT*FROM A
-- 建立一个辅助的临时表就可以了
SELECTTOP8000 id =identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b
SELECT
A.ID,
COUNTRY =SUBSTRING(A.COUNTRY, B.ID, CHARINDEX(';', A.COUNTRY +';', B.ID) - B.ID)
FROM A, # B
WHERESUBSTRING(';'+ a.COUNTRY, B.id, 1) =';'
ORDERBY1,2
GO
DROPTABLE A,#
id country
----------- ----------------
1 中国;日本;韩国
2 美国;意大利;法国
3 德国
(所影响的行数为 3 行)
ID COUNTRY
----------- ---------
1 韩国
1 日本
1 中国
2 法国
2 美国
2 意大利
3 德国
(所影响的行数为 7 行)
表现形式2:
declare@atable(A varchar(20), B varchar(20), C varchar(20), D varchar(20))
insert@aselect'a1' ,'b1', 'c1', 'd1/da'
unionallselect'a2' ,'b2' ,'c2' ,'d22/da/da22'
unionallselect'a3' ,'b3' ,'c3' ,'d3'
declare@ttable( id intidentity(1,1),e int)
insert@tselecttop5001from syscolumns
select a,b,c,substring(d+'/',id,charindex('/',d+'/',id+1)-id)d
from@a a,@t b
wheresubstring('/'+d,id,1)='/'
--result
/*a b c d
-------------------- -------------------- -------------------- ---------------------
a1 b1 c1 d1
a2 b2 c2 d22
a3 b3 c3 d3
a1 b1 c1 da
a2 b2 c2 da
a2 b2 c2 da22