declare @str nvarchar(2000)
set @str ='00018+010+0012^SP+MB+4048^00818-02-1^31313'
print substring(@str,1,charindex('^',@str)-1)
print substring(@str,charindex('^',@str)+1,charindex('^',substring(@str,charindex('^',@str)+1,len(@str)-charindex('^',@str)))-1)
00018+010+0012
SP+MB+4048

解决方案 »

  1.   

    declare @str  nvarchar(2000)
    set @str ='00018+010+0012^SP+MB+4048^00818-02-1^31313'
    select substring(stuff(@str,1,charindex('^',@str),''),1,charindex('^',stuff(@str,1,charindex('^',@str),''))-1)
    /*
    SP+MB+4048
    */
      

  2.   

    STUFF在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。SELECT STUFF('abcdef', 2, 3, 'ijklmn')
    GO下面是结果集:  --------- 
    aijklmnef (1 row(s) affected)
      

  3.   

    CREATE function Get_StrArrayStrOfIndex
    (
      @str varchar(1024),  --要分割的字符串
      @split varchar(10),  --分隔符号
      @index int --取第几个元素
    )
    returns varchar(1024)
    as
    begin
      declare @location int
      declare @start int
      declare @next int
      declare @seed int  set @str=ltrim(rtrim(@str))
      set @start=1
      set @next=1
      set @seed=len(@split)
      
      set @location=charindex(@split,@str)
      while @location<>0 and @index>@next
      begin
        set @start=@location+@seed
        set @location=charindex(@split,@str,@start)
        set @next=@next+1
      end
      if @location =0 select @location =len(@str)+1
     --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
      
      return substring(@str,@start,@location-@start)
    end
      

  4.   

    declare @str  nvarchar(2000)
    set @str ='00018+010+0012^SP+MB+4048^00818-02-1^31313'
    select substring(stuff(@str,1,charindex('^',@str),''),1,charindex('^',stuff(@str,1,charindex('^',@str),''))-1)
    select left(stuff(@str,1,charindex('^',@str),'') , charindex('^',stuff(@str,1,charindex('^',@str),''))-1)