sql字符串处理

【问题】

1,4-10,30 这种形式,如何拆成 9条记录,字段值分别是1,4,5,6,7,8,9,10,30 
------------------------------------
1,4-28,30
表示 
1,
4,
5,
6,
7,
8,
9,
10,
30
就是要拆成9条记录,但是我如何写代码呢?
首先用逗号分割,然后横杠表示范围。
而且可能是 2,6-8,4,10-12 这种形式。

2,6-8,4,10-12
要拆分成:
2,
6,
7,
8,
4,
10,
11,
12

 

【解决方法】

1、  先建一个函数

2、   /* 
功能:实现split功能的函数 
*/ 

alter function fn_split  

@inputstr varchar(8000),  
@seprator varchar(10) 

returns @temp table (a varchar(200)) 
as  

begin 
declare @i int 

set @inputstr = rtrim(ltrim(@inputstr)) 
set @i = charindex(@seprator, @inputstr) 

while @i > = 1 
begin 
  insert @temp values(left(@inputstr, @i - 1))  
  set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i) 
set @i = charindex(@seprator, @inputstr) 
end 

if @inputstr <> '\ ' 
insert @temp values(@inputstr) 

return  
end 
go 

 

 

 

3、  创建存储过程

 

create procedure test

@strIn varchar(50)

as

begin

      declare test_cursor cursor scroll  for

    select * from  dbo.fn_split(@strIn,',')

    declare @c varchar(20)

    declare @i int

    declare @j int

    open test_cursor

fetch first from test_cursor  into @c

 

while @@FETCH_STATUS=0

  begin

      if  (select charindex('-',@c))<1

           insert into t2 values (@c) 

     else

      begin

       set @i = convert(int,left(@c,charindex('-',@c)-1))

        set @j= convert(int,right(@c,len(@c)-charindex('-',@c)))

       while @i<@j

        begin

        insert into t2 values    (str(@i))

       set @i=@i+1

       end

     end

  fetch next from test_cursor  into @c

end

 close test_cursor

deallocate test_cursor

end

 

【调用】

Exec test(‘1,4-10,30’)

 

 

【结果】

 

你可能感兴趣的:(字符串处理)