日期:2014-05-19  浏览次数:20492 次

请各位看一下下列代码如何实现?(一天到晚游泳的鱼请进来看一下)
create   table   tb(bh   varchar(10),mc   varchar(50))
insert   into   tb(bh,mc)   values( '001 ',                     'xyz/ym/zx32s(50/25/25) ')
insert   into   tb(bh,mc)   values( '002 ',                     'xb/yss45s(65/35) ')
insert   into   tb(bh,mc)   values( '003 ',                     'cx40s '   )
........
要求执行结果如下
001 xyz 50
001 ym 25
001 zx   25
002 xb 65
002 yss   35
003           cx             100
......



------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(bh varchar(10),mc varchar(50))
insert into tb(bh,mc) values( '001 ', 'xyz/ym/zx32s(50/25/25) ')
insert into tb(bh,mc) values( '002 ', 'xb/yss45s(65/35) ')
insert into tb(bh,mc) values( '003 ', 'cx40s ' )
go

alter table tb add mc1 varchar(50)
alter table tb add mc2 varchar(50)
go

update tb
set mc1 = (Case When charindex( '( ' , mc) > 0 Then left(mc , charindex( '( ',mc) -1) Else mc End),
mc2 = (Case When charindex( '( ' , mc) > 0 Then substring(mc , charindex( '( ' , mc) + 1 , charindex( ') ' , mc) - charindex( '( ' , mc) - 1) Else '100 ' End)

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

SELECT
id = identity(int,1,1),
A.bh,
mc1 = SUBSTRING(A.mc1, B.ID, CHARINDEX( '/ ', A.mc1 + '/ ', B.ID) - B.ID)
into test1
FROM tb A, # B
WHERE SUBSTRING( '/ ' + A.mc1, B.ID, 1) = '/ '
ORDER BY 1,2

Update
test1
Set
mc1 = Left(mc1, PatIndex( '%[0-9]% ', mc1) - 1)
Where
PatIndex( '%[0-9]% ', mc1) > 0

SELECT
id = identity(int,1,1),
A.bh,
mc2 = SUBSTRING(A.mc2, B.ID, CHARINDEX( '/ ', A.mc2 + '/ ', B.ID) - B.ID)
into test2
FROM tb A, # B
WHERE SUBSTRING( '/ ' + A.mc2, B.ID, 1) = '/ '
ORDER BY 1,2

select a.bh , mc1 , b.mc2 from test1 a,test2 b where a.id = b.id


drop table tb,#,test1,test2
/*
bh mc1 mc2
001 xyz 50
001 ym 25
001 zx 25
002 xb 65
002 yss 35
003 cx 100
*/