@str='1/2/3/4/5' 
获取第三个/和第四个/中的字符? 
该例子中获取4。
例如select 函数(@str) from  TB
结果是
4

解决方案 »

  1.   

    create table ta( col varchar(100))
    insert ta select
    'aa/bb/cc/dd/ee/ff' union all select
    'aaa/bbb/ccc/ddd/eee/ff/ggg'go--加一个分隔函数:
    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
    GOselect dbo.F_split(col,1,'/'),dbo.F_split(col,3,'/'),dbo.F_split(col,5,'/')
    from tadrop table ta
    drop function F_split
      

  2.   

    --加一个分隔函数:
    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
    declare @str varchar(30)
    set @str = '1/2/3/4/5' select dbo.F_split(@str,4,'/')
    drop function F_split
    /*
    -----------
    4(1 行受影响)
    */
      

  3.   


    --如果你的"/"固定是4个的话,还可以这样:declare @s varchar(100)set @s = '1/2/3/4/5' set @s = replace(stuff(@s,1,charindex('/',@s),''),'/','.')select parsename(replace(@s,'/','.'),2)
      

  4.   

    ⒉STUFF(character_expression1,start,length,character_expression2)
    功能:将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字,然后将第二个字符串插入第一个字符串的开始位置。
    Character_expression1:一个要被插入字符串的字符串表达式。可以是常量、变量,也可以是字符列或二进制数据列。
    start:一个整数,指定删除和插入的开始位置。
    length:一个整数,指定要删除的字符数。示例:
    declare @s varchar(50)
    set @s = '123456789'
    --将'23456'删除后插入'哈哈'
    select stuff(@s,2,5,'哈哈') as 代替字符串结果:
    代替字符串
    -----------------------
    '1哈哈789'⒊CHARINDEX(expression1,expression2 [,start_location])
    功能:在expression2中搜索expression1并返回其起始位置,搜索的开始位置为start_location。
    expression1:要查找的字符表达式。最大长度为8000字符。
    expression2:要搜索的字符表达式。
    start_location:可选项,表示搜索的起始位置。示例:
    declare @s varchar(50)
    set @s = '1234567859'
    --从第位开始搜索'5',并返回其在字符串中所在位置
    select charindex('5',@s,8) as 位置
    -
    结果:
    位置
    -----------------------
    9
      

  5.   


    --修正个多余的语句:declare @s varchar(100)set @s = '1/2/3/4/5' set @s = replace(stuff(@s,1,charindex('/',@s),''),'/','.')select parsename(@s,2)/**
    4
    **/
      

  6.   

    我自己写的一个函数,一劳永逸
    --根据分隔符获取字符串中的一部分字符串
    ALTER FUNCTION [dbo].[fn_SplitString]
    (
    @FullString as nvarchar(4000), --整体字符串
    @SplitChar as nvarchar(10),  --分隔符
    @Index as int, --第几个,从1开始
    @Maxlenth as int=null --最大长度,如果是0或null,则不限制长度。
    )
    RETURNS nvarchar(4000)
    AS
    BEGIN
    if @FullString is null or @SplitChar is null or @SplitChar ='' return null;
    if ltrim(@FullString) = '' return '';
    declare @site int;
    declare @n int;
    declare @result nvarchar(2000);

    set @n=0;
    set @site =0 ;
    while (@n< @Index)
    begin
    set @n= @n+1;
    set @site=charindex(@SplitChar,@FullString);
    if @site=0
    begin
    set @result=@FullString;
    set @FullString='';
    end
    else
    begin
    set @result=substring(@FullString,1,@site-1);
    set @FullString=substring(@FullString,@site+1,len(@FullString)-@site) ;
    end

    end
    if @Maxlenth>0 and len(@result) > @Maxlenth
    set @result = substring(@result,1,@Maxlenth); return @result;

    END
    使用方法:
    select [dbo].[fn_SplitString]('1/2/3/4/5','/',4,0);以后别的地方也可以用