ID     NAME
1      E5638-DQ-QB-DE
2      101-1080EE-Q-QS-62SDC
..     ...通过查询SQL得出结果是(用-来拆分,从后来数据,取第4个开始到最前面的字符串):ID     NAME
1      E5638
2      101-1080EE
..     ...

解决方案 »

  1.   

    我的方法:
    declare @string varchar(100) = 'E5638-DQ-QB-DE'
    select REVERSE(SUBSTRING(REVERSE(@string), CHARINDEX('-',REVERSE(@string))+1, LEN(@string)))拆分3个的话,语句会很长,就没全写出来,大致明白一下思路吧。也许别人还有更好答案。
      

  2.   

    还有一个问题是:
    ID   NAME
    1    A
    2    B
    3    C
    .    ..
    查询效果是:
       NAME
       A B C ..
    中间有一个空格
      

  3.   

    --创建示例数据
    create table #ta(id int, Name varchar(50))
    insert into #ta 
    select 1, 'E5638-DQ-QB-DE'
    union select 2, '101-1080EE-Q-QS-62SDC'
    --解决方案
    select id,reverse(dbo.getstrofindex(reverse(Name),4,'-'))Name from #ta
    /*
    id          Name
    ----------- --------
    1           E5638
    2           101-1080EE(2 行受影响)*/
    --所用函数
    CREATE function getstrofindex (@str varchar(8000),@index int ,@spit varchar(10))
    returns varchar(8000)
    as
    begin
    declare @next int
      select @next =1 
      while (@index > @next )
      begin
        select @str = stuff(@str,1,charindex(@spit,@str),'')
        select @next =@next +1
      end
      return @str
    end