求字符串排序?'051703121129'求兄弟们写一个函数,将字符串:'051703121129'    转换成:'030511121729'  每二位是一个字符串     
          '05 17 03 12 11 29'-------'03 05 11 12 17 29'       结果要:将字符串:'051703121129'    转换成:'030511121729' 

解决方案 »

  1.   

    if object_id('f_GetStr') is not null
        drop function f_GetStr
    go
    create function dbo.f_GetStr(@s varchar(100))
    returns varchar(100)
    as
    begin
        declare @t table(s varchar(10))
        while len(@s)>0
        begin
            insert @t select left(@s,2)
            set @s=stuff(@s,1,2,'')
        end
        select @s=''
        select @s=@s+s 
        from @t
        order by s
        return @s
    end
    godeclare @s char(20)
    set @s='051703121129'
    select result=dbo.f_GetStr(@s)/*
    result
    -------------
    030511121729
    */
      

  2.   

    create function fn_test(@s varchar(1000))
    returns varchar(1000)
    as
    begin
    declare @t table (s varchar(2))
    declare @i int, @ret varchar(1000)
    select @i = 0, @ret = ''
    while @i < (len(@s)+1)/2
    begin
    insert @t select substring(@s,@i*2+1,2)
    set @i = @i + 1
    end
    select @ret = @ret + s from @t order by s
    return @ret
    end
    goselect dbo.fn_test('051703121129') --> 030511121729
      

  3.   

    --瞎弄的
    IF OBJECT_ID('f_test') IS NOT NULL 
       DROP FUNCTION f_test
    GOCREATE FUNCTION f_test (@var VARCHAR(50))
    RETURNS VARCHAR(50)
    AS 
    BEGIN
        DECLARE @test TABLE (tt VARCHAR(2))

        WHILE LEN(@var) > 0 
              BEGIN
                    INSERT  INTO @test
                            SELECT  LEFT(@var,2)
                    SELECT  @var = STUFF(@var,1,2,'')
              END

        DECLARE @str VARCHAR(50)
        SELECT  @str = ISNULL(@str,'') + t.tt
        FROM    (SELECT TOP 100
                        tt
                 FROM   @test
                 ORDER BY CAST(tt AS INT)
                ) AS t 
        RETURN @str
    END 
    GODECLARE @var VARCHAR(50)
    SET @var = '051703121129'
    SELECT dbo.f_test(@var)
      

  4.   


    OK,以上乃正解。
    建个临时表,两位存一个字段,在排序组合成新字符串输出。
    不用函数了,存储过程直接select出来也行嘛。