某字段的值: 某某某-某某某某某-某某-某某某某
每段长度不定 但总段数固定 并用于分割的字符也固定
需要返回的集中有4个字段 值分别是其中的4段
用substring实在是太烦了
高人有好的办法吗

解决方案 »

  1.   

    declare @s varchar(1000)
    set @s = '某某某-某某某某某-某某-某某某某'select PARSENAME ( replace(@s,'-','.') , 1 ) ,
     PARSENAME ( replace(@s,'-','.') , 2) ,
     PARSENAME ( replace(@s,'-','.') ,3) ,
     PARSENAME ( replace(@s,'-','.') , 4) 
      

  2.   

    declare @s varchar(1000)
    set @s = '某某某-某某某某某-某某-某某某某'select PARSENAME ( replace(@s,'-','.') , 1 ) 
    select  PARSENAME ( replace(@s,'-','.') , 2)
    select  PARSENAME ( replace(@s,'-','.') ,3) 
    select  PARSENAME ( replace(@s,'-','.') , 4) /*
               
    --------------
    某某某某(所影响的行数为 1 行)            
    -------------
    某某(所影响的行数为 1 行)             
    -------------
    某某某某某(所影响的行数为 1 行)                
    --------------
    某某某(所影响的行数为 1 行)
    */
      

  3.   

    declare @s varchar(1000)
    set @s = '某某某-某某某某某-某某-某某某某'select PARSENAME ( replace(@s,'-','.') , 1 ) ,
     PARSENAME ( replace(@s,'-','.') , 2) ,
     PARSENAME ( replace(@s,'-','.') ,3) ,
     PARSENAME ( replace(@s,'-','.') , 4) 
      

  4.   

    create table tb(s varchar(100))
    insert into tb select '某某某-某某某某某-某某-某某某某'select  
    PARSENAME(replace(s,'-','.'),4) as 第1列,
    PARSENAME(replace(s,'-','.'),3)as 第2列,
    PARSENAME(replace(s,'-','.'),2)as 第3列,
    PARSENAME(replace(s,'-','.'),1)as 第4列
    from tb第1列 第2列 第3列 第4列
    某某某 某某某某某 某某 某某某某
      

  5.   

    如果多于4个,写个函数,如下 create  function dbo.f_GetStr(
    @s varchar(8000),      --包含多个数据项的字符串
    @pos int,             --要获取的数据项的位置
    @split varchar(10)     --数据分隔符
    )returns varchar(100)
    as
    begin
        if @s is NULL return(NULL)
        declare @splitlen int
        select @splitlen=len(@split+'a')-2
        while @pos>1 AND charindex(@split,@s+@split)>0
            select @pos=@pos-1,
                @s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'')
        return(isnull(left(@s,charindex(@split,@s+@split)-1),''))
    endgo 
    declare @s varchar(200)set @s='某某某-某某某某某-某某-某某某某-某'select 
    dbo.f_GetStr(@s,1,'-') as c1,
    dbo.f_GetStr(@s,2,'-') as c2,
    dbo.f_GetStr(@s,3,'-') as c3,
    dbo.f_GetStr(@s,4,'-') as c4,
    dbo.f_GetStr(@s,5,'-') as c5/*
    c1 c2 c3 c4 c5
    ---------------------------------------------------
    某某某 某某某某某 某某 某某某某 某
    */godrop function dbo.f_GetStr
      

  6.   

    create  function dbo.f_GetStr( 
    @s varchar(8000),      --包含多个数据项的字符串 
    @pos int,             --要获取的数据项的位置 
    @split varchar(10)     --数据分隔符 
    )returns varchar(100) 
    as 
    begin 
        if @s is NULL return(NULL) 
        declare @splitlen int 
        select @splitlen=len(@split+'a')-2 
        while @pos>1 AND charindex(@split,@s+@split)>0 
            select @pos=@pos-1, 
                @s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'') 
        return(isnull(left(@s,charindex(@split,@s+@split)-1),'')) 
    end go  
    declare @s varchar(200) set @s='某某某-某某某某某-某某-某某某某-某' select  
    dbo.f_GetStr(@s,1,'-') as c1, 
    dbo.f_GetStr(@s,2,'-') as c2, 
    dbo.f_GetStr(@s,3,'-') as c3, 
    dbo.f_GetStr(@s,4,'-') as c4, 
    dbo.f_GetStr(@s,5,'-') as c5 /* 
    c1 c2 c3 c4 c5 
    --------------------------------------------------- 
    某某某 某某某某某 某某 某某某某 某 
    */ go drop function dbo.f_GetStr 
      

  7.   

    哇 SQL版人气好旺 这一会就这么多回复