日期:2014-05-18  浏览次数:20459 次

如何拆分字段中1|2|3|4这样的字符串变成多个字段值
请问各位高人:

在mssql2000中,一个表中有org_path字段,这个字段中的数据类似这样:

org_path
---------------------------
1
1|2
1|28
1|31|124
1|31|124|192
1|5|134|156|168

最小值是 "1 ",最大的值如   1|5|134|156|168   ,包含5个值,4个|

现在我是想把org_path这字段中的值拆分成5个字段,如下:

org_path                             a               b               c                 d                   e
------------------------
1                                           1
1|2                                       1               2
1|28                                     1               28
1|31|124                             1               31             124
1|31|6|192                         1               31             6                 192
1|5|134|156|168               1               5               134             156               168  


请问,如果实现如上所需要的,应该怎么写SQL,请各位指导,多谢!



------解决方案--------------------
declare @t table(org_path varchar(20))
insert into @t select '1 '
insert into @t select '1|2 '
insert into @t select '1|28 '
insert into @t select '1|31|124 '
insert into @t select '1|31|124|192 '
insert into @t select '1|5|134|156|168 '


select
a,
reverse(parsename(b,1)) as b,
reverse(parsename(b,2)) as c,
reverse(parsename(b,3)) as d,
reverse(parsename(b,4)) as e
from
(select
a,
reverse(replace(case when b= ' ' then b else left(b,len(b)-1) end , '| ' , '. ')) as b
from
(select
left(org_path,charindex( '| ',org_path+ '| ')-1) as a,
stuff(org_path+ '| ',1,charindex( '| ',org_path+ '| '), ' ') as b
from
@t
) s
)t


/*
a b c d e
---- ---- ---- ---- ----
1 NULL NULL NULL NULL
1 2 NULL NULL NULL
1 28 NULL NULL NULL
1 31 124 NULL NULL
1 31 124 192 NULL
1 5 134 156 168
*/
------解决方案--------------------
学习,如果第一级是1
select 1,reverse(PARSENAME(A,1)),reverse(PARSENAME(A,2)),reverse(PARSENAME(A,3)),reverse(PARSENAME(A,4)) from
(select replace(reverse(stuff(org_path,1,2, '