例如:有一个字符串“休闲\体育\球类\排球\男子排球\白英”现在需要把第三项,第四项和第五项截取出来,如何用一个select语句写出?输出结果:
第三项  |  第四项  |  第五项
球类        排球     男子排球

解决方案 »

  1.   

    drop function udf_splitstring
    go
    CREATE function udf_splitstring
    (
    @str varchar(8000) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns @retab table(id int identity(1,1),istr varchar(8000))
    as
    begin
    declare @i     int
    declare @splen int
    select @splen=len(@spli),@i=charindex(@spli,@str)
    while @i > 0
    begin
    insert into @retab(istr)
    values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    select @i=charindex(@spli,@str)
    end
    if @str<>'' insert into @retab(istr) values(@str)
    return
    enddeclare @str varchar(1000)
    set @str='休闲\体育\球类\排球\男子排球\白英'
    select 第一项=(select istr from udf_splitstring(@str,'\') where id=3),
    第二项=(select istr from udf_splitstring(@str,'\') where id=4),
    第三项=(select istr from udf_splitstring(@str,'\') where id=5)
    /*
    第一项 第二项 第三项
    ----------------------------
    球类 排球 男子排球
    */
      

  2.   

    declare @s varchar(1000),@str varchar(1000),@i int
    select @s = '休闲\体育\球类\排球\男子排球\白英', @str = '', @i = 1while @s <> '' begin    
      if (@i > 2 and @i < 6)
        select @str = @str + substring(@s,1,charindex('\',@s))
      select @s = substring(@s,charindex('\',@s) + 1,len(@s) - 1)
      select @i = @i + 1
    end 
    select @str = left(@str,len(@str) - 1)select [第一项] = substring(@str,1,charindex('\',@str) - 1),
    [第二项] = substring(@str,charindex('\',@str) + 1,charindex('\',@str,charindex('\',@str)) - 1),
    [第三项] = substring(reverse(@str),1,charindex('\',reverse(@str)) - 1)
      

  3.   

    declare @s varchar(1000),@str varchar(1000),@i int
    select @s = '休闲\体育\球类\排球\男子排球\白英', @str = '', @i = 1declare @s1 varchar(10),@s2 varchar(10),@s3 varchar(10),@s4 varchar(10),@s5 varchar(10)
    declare @strtmp varchar(50)
    declare @j intset @strtmp=@s
    select @j=charindex('\',@s)
    print @j--取第一列
    set @s1=left(@strtmp,@j-1)
    select @s1
    --改字符串
    set @strtmp=substring(@strtmp,@j+1,50)
    select @strtmp--取第二列
    set @s2=left(@strtmp,@j-1)
    select @s2
    --改字符串
    set @strtmp=substring(@strtmp,@j+1,50)
    select @strtmp
      

  4.   

    CREATE function udf_splitstring
    (
    @str varchar(8000)--要分拆的字符串
    ,@spli varchar(10)--字符串分隔符
    )
    returns @retab table(id int identity(1,1),istr varchar(8000))
    as
    begin
    declare @i int
    declare @splen int
    select @splen=len(@spli),@i=charindex(@spli,@str)
    while @i > 0
    begin
    insert into @retab(istr)
    values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    select @i=charindex(@spli,@str)
    end
    if @str<>'' insert into @retab(istr) values(@str)
    return
    enddeclare @str varchar(1000)
    set @str='休闲\体育\球类\排球\男子排球\白英'
    select 第一项=(select istr from udf_splitstring(@str,'\') where id=3),
    第二项=(select istr from udf_splitstring(@str,'\') where id=4),
    第三项=(select istr from udf_splitstring(@str,'\') where id=5)
    /*
    第一项第二项第三项
    ----------------------------
    球类排球男子排球
    */
      

  5.   

    谢谢大家,gahade(与君共勉)的通用性比较强。
      

  6.   

    select a=substring(charindex(字段1,'球类'),2),b= substring(charindex(字段1,'排球'),2),c= substring(charindex(字段1,' 男子排球'),4) from 表