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

怎么使用SQL截取空格字符串

2012-12-28 
如何使用SQL截取空格字符串路径顺序号路径A1 A2 A3B1 B2 B3如何使用SQL的存储过程和游标将它修改成为路径

如何使用SQL截取空格字符串
路径顺序号    路径
             A1 A2 A3
           B1 B2 B3
如何使用SQL的存储过程和游标将它修改成为
路径顺序号    路径
  1           A1 
   2        A2 
  3         A3
   1        B1
   2        B2 
   3        B3

[最优解释]

create table tb(col varchar(20))
insert into tb
 select 'A1 A2 A3' union all
 select 'B1 B2 B3'
 
 
 --创建表值函数
 create function f_name(@str varchar(20))  
 returns @tb table(no int Identity(1,1),col varchar(10))
 as  
 begin  
     select @str=replace(@str,' ',',')+','
     while charindex(',',@str)>1  
     begin  
      insert into @tb (col)
           select left(@str,charindex(',',@str)-1)  
      set @str=right(@str,len(@str)-charindex(',',@str))  
     end  
   return
 end
 
--查询
select b.* from tb cross apply f_name(tb.col) b
 
 /*
 no          col
----------- ----------
1           A1
2           A2
3           A3
1           B1
2           B2
3           B3

(6 row(s) affected)

[其他解释]
--> 测试数据
if object_id('[TB]') is not null drop table [TB]
GO
create table [TB]([路径] varchar(20))
insert [TB]
select 'A1 A2 A3' union all
select 'B1 B2 B3'

SELECT 
     [路径编号]=RIGHT(flag,1),
     [路径]=left(flag,1) FROM(
select 
     flag=PARSENAME(REPLACE([路径],' ','.'),3)
from [TB]
UNION ALL
select 
     PARSENAME(REPLACE([路径],' ','.'),2)
from [TB]
UNION ALL
select 
     PARSENAME(REPLACE([路径],' ','.'),1)
from [TB]
)t
ORDER BY 2,1

/*
 路径编号 路径
---- ----
1    A
2    A
3    A
1    B
2    B
3    B

(6 行受影响)

*/



DROP TABLE TB


[其他解释]
拆着玩吧

declare @t table (
路径顺序号    int,
路径 varchar(30)
)

insert @t select 1,'A1 A2 A3'
union all select 2,'B1 B2 B3'


declare @s varchar(3000)
declare @i int
select @s = ISNULL(@s + ' union all select '+ CAST(路径顺序号 as varchar) +',''','
declare @i int
declare @j int
declare @t table (
路径顺序号    int,
路径 varchar(30),
i int
)
insert @t(i,路径)
select '+ CAST(路径顺序号 as varchar) +',''') + REPLACE(路径,' ',''' union all select '+ CAST(路径顺序号 as varchar) +',''') + ''''  from @t

set @s = @s + '
update @t set
   @j = case when @i = i then @j + 1 else 1 end
   ,@i = i
   ,路径顺序号 = @j
select 路径顺序号,路径 from @t   
'
exec( @s)

--结果
路径顺序号路径
1A1
2A2
3A3
1B1
2B2
3B3

[其他解释]
有谁看到了,能否帮个忙,我很急需
[其他解释]

SELECT 
     [路径编号]=RIGHT(flag,1),
     [路径]=flag 
     FROM(
select 
     flag=PARSENAME(REPLACE([路径],' ','.'),3)
from [TB]
UNION ALL
select 
     PARSENAME(REPLACE([路径],' ','.'),2)
from [TB]
UNION ALL
select 
     PARSENAME(REPLACE([路径],' ','.'),1)
from [TB]
)t
ORDER BY 2,1
[其他解释]
谢谢啦~我貌似有点看不太懂~刚学SQL,好多语句都还没弄明白
[其他解释]
select left(@str,charindex(',',@str)-1)
set @str=right(@str,len(@str)-charindex(',',@str))
这两句都分别代表了什么意思啊?

热点排行