--加一个分隔函数:
create  function F_split(
                @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(nullif(left(@s,charindex(@split,@s+@split)-1),''))
END
GO

解决方案 »

  1.   


    --没测试效率,试看看:
    create function [dbo].[R_GetAnswerPos] (@num int,@CJ varchar(1000)) 
    returns varchar(10)
    begin
    declare @i int,@return varchar(100)
    set @i=0
    if(len(@cj)-len(replace(@cj,',',''))<@num)
    set @return=null
    else
    begin
    while(charindex(',',@cj)>0)
    begin
    if(@i=@num-1)
    begin
    set @return=left(@cj,charindex(',',@cj)-1)
    break;
    end
    else
    begin
    set @i=@i+1
    set @Cj=right(@cj,len(@cj)-charindex(',',@cj))
    end
    end
    end
    return @return
    end
    goselect [dbo].[R_GetAnswerPos] (5,'aasdf,c,saf,es,fe,s,sasd,x') 
      

  2.   

    下面是查找第N-1个与第N个逗号之间的字符串的函数。
    create function getindexstr(@s varchar(8000),@n int)
    --@s 需要查找的字符串,@n 查找的个数。
    returns varchar(8000)
    as
    begin
     declare @rs varchar(8000),@i int,@j
     select @i = 1,@s = @s+',',@j = 1
     while charindex(',',@s,@i)>0 and @j<=@n
       select @j = @j + 1,@i = charindex(',',@s,@i)+1
     if @j < @n or len(@s)<@i return ''
     return substring(@s,@i,charindex(',',@s,@i)-@i)
    end
      

  3.   

    to:happyflystone
    你的方法和我写的函数查询时间差不多
      

  4.   

    纯手写,发现错误,修正。
    create function getindexstr(@s varchar(8000),@n int)
    --@s 需要查找的字符串,@n 查找的个数。
    returns varchar(8000)
    as
    begin
     declare @rs varchar(8000),@i int,@j int
     select @i = 1,@s = @s+',',@j = 1
     while charindex(',',@s,@i)>0 and @j<@n
       select @j = @j + 1,@i = charindex(',',@s,@i)+1
     if @j < @n or len(@s)<@i return ''
     return substring(@s,@i,charindex(',',@s,@i)-@i)
    end
      

  5.   

    DECLARE @t TABLE(v VARCHAR(100))
    INSERT @t SELECT 'a,b,c,d,e'
    UNION ALL SELECT 'a,,b,dd,c'SELECT v,CAST('<item value=''' + REPLACE(v,',','''/><item value=''') + '''/>' AS XML).value('(/item/@value)[4]','varchar(10)') FROM @t/*
    a,b,c,d,e d
    a,,b,dd,c dd*/