如何使用存储过程和游标截取空格字符串
数据库中已存在一个BB表格,该表格显示为(省略号代表下面还有很多同样的数据)
电缆线编号 路径顺序号 路径类型 路径
A1 1DU2E 1DU2A
A2 1DU2E 1DU2A
A3 1EA/B 1E205
... .....
如何使用存储过程和游标将表格生成为
电缆线编号 路径顺序号 路径类型 路径
A1 1 1DU2E
2 1DU2A
A2 1 1DU2E
2 1DU2A
A3 1 1EA/B
2 1E205
... ...
[最优解释]
select 电缆线编号,路径顺序号,路径,路径类型 from
(
select 电缆线编号,1 as [路径顺序号], left(路径,5) as [路径],
路径类型,电缆线编号 as 序号 from bb
union all
select '' as 电缆线编号,2 as [路径顺序号], right(路径,5) as [路径],
路径类型,电缆线编号 as 序号 from bb
) as tb
order by 序号,路径顺序号
----------------------------
-- Author :TravyLee(物是人非事事休,欲语泪先流!)
-- Date :2012-11-21 14:53:01
-- Version:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
--Jul 9 2008 14:43:34
--Copyright (c) 1988-2008 Microsoft Corporation
--Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
go
create table [test]
(
[电缆线编号] varchar(2),
[路径顺序号] int,
[路径] varchar(255),
[路径类型] varchar(255)
)
insert [test]
select 'A1',null,'1DU2E 1DU2A','' union all
select 'A2',null,'1DU2E 1DU2A','' union all
select 'A3',null,'1EA/B 1E205',''
go
;with t
as(
select
A.[电缆线编号],
B.value as [路径]
from(
select
[电缆线编号],
[路径] = convert(xml,' <root> <v>' + replace([路径], ' ', ' </v> <v>')
+ ' </v> </root>')
from
[test]
)A
outer apply(
select
value = N.v.value('.', 'varchar(100)')
from
A.[路径].nodes('/root/v') N(v)
)B
)
select
[电缆线编号],
[路径顺序号]=row_number()over(partition by 电缆线编号 order by getdate()),
[路径],
'' as [路径类型]
from
t
order by
[电缆线编号],[路径顺序号]
/*
电缆线编号 路径顺序号 路径 路径类型
----- -------------------- ---------------------------------------------------------------- ----
A1 1 1DU2E
A1 2 1DU2A
A2 1 1DU2E
A2 2 1DU2A
A3 1 1EA/B
A3 2 1E205
(6 行受影响)
*/
1DU2E 1DU2A
1DU2E 1DU2A
1EA/B 1E205
路径
1DU2E
1DU2A
1DU2E
1DU2A
1EA/B
1E205
而路径类型这一栏其实是空的,没有任何数据
[其他解释]
什么东西 格式乱七八糟的
[其他解释]
数据库中已存在一个BB表格,该表格显示为(省略号代表下面还有很多同样的数据)
电缆线编号 路径顺序号 路径 路径类型
A1 1DU2E 1DU2A
A2 1DU2E 1DU2A
A3 1EA/B 1E205
... .....
如何使用存储过程和游标将表格生成为
电缆线编号 路径顺序号 路径 路径类型
A1 1 1DU2E
2 1DU2A
A2 1 1DU2E
2 1DU2A
A3 1 1EA/B
2 1E205
... ...
[其他解释]
表格的形式就是这样的额~这下能看懂了吗
[其他解释]
能不能再变得简单些~中间有好多我都看不懂
[其他解释]
if object_id('[test]') is not null
drop table [test]
go
create table [test]
(
[电缆线编号] varchar(2),
[路径顺序号] int,
[路径] varchar(255),
[路径类型] varchar(255)
)
insert [test]
select 'A1',null,'1DU2E 1DU2A','' union all
select 'A2',null,'1DU2E 1DU2A','' union all
select 'A3',null,'1EA/B 1E205',''
go
select 电缆线编号,路径顺序号,路径,路径类型 from
(
select 电缆线编号,1 as [路径顺序号], left(路径,5) as [路径],
路径类型,电缆线编号 as 序号 from [test]
union all
select '' as 电缆线编号,2 as [路径顺序号], right(路径,5) as [路径],
路径类型,电缆线编号 as 序号 from [test]
) as tb
order by 序号,路径顺序号--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
go
create table [test]
(
[电缆线编号] varchar(2),
[路径顺序号] int,
[路径] varchar(255),
[路径类型] varchar(255)
)
insert [test]
select 'A1',null,'1DU2E 1DU2A','' union all
select 'A2',null,'1DU2E 1DU2A','' union all
select 'A3',null,'1EA/B 1E205',''
go
select
[电缆线编号],[路径顺序号]=row_number()over(partition by 电缆线编号 order by getdate()),
[路径]=substring(路径,number,charindex(' ',路径+' ',number)-number),[路径类型]
from test,master..spt_values
WHERE type='P' and substring(' '+路径,number,1)=' '
and number>0 and number<len(路径)