首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么使用存储过程和游标截取空格字符串

2012-12-16 
如何使用存储过程和游标截取空格字符串数据库中已存在一个BB表格,该表格显示为(省略号代表下面还有很多同

如何使用存储过程和游标截取空格字符串
数据库中已存在一个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

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
 ...                                                   ...  
[其他解释]
表格的形式就是这样的额~这下能看懂了吗
[其他解释]
能不能再变得简单些~中间有好多我都看不懂
[其他解释]

引用:
能不能再变得简单些~中间有好多我都看不懂


这种需求就不常见  怎么简单?
[其他解释]
引用:
SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071---------------------------------------------……

借用数据,使用我前面的语句如下:

--> 测试数据:[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 电缆线编号,路径顺序号,路径,路径类型  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 序号,路径顺序号

[其他解释]
引用:
引用:SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071-------------------------……


假如是1DU2E 1DU2A 1DU2F 1DU2M 1DU2G 1DU2H

那你是不是打算写6个union all??
[其他解释]
引用:
引用:SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071-------------------------……


楼主真实情况应该不仅仅这么简单的
[其他解释]
版主,你真的太聪明了,实际问题比这个复杂,我都不知道要怎么下手了~主要还是我的基础不扎实
[其他解释]
引用:

引用:能不能再变得简单些~中间有好多我都看不懂

这种需求就不常见  怎么简单?

那么这样吧

--> 测试数据:[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(路径)

热点排行
Bad Request.