比如 1      格式化成 0001
     2      格式化成 0002
     2-2    格式化成 00010002
     2-2-1  格式化成 000100020001
     3      格式化成 0003
     3-1    格式化成 00030001
     ...
     3-10   格式化成 00030010
     3-10-1 格式化成 00030010001
     ....
     10     格式化成 0010
     10-1   格式化成 0010001
     ....
     即中间分隔符‘-’是不确定有多少级,有两级、三级 、四级都有可能,希望用函数实现!

解决方案 »

  1.   

    create function fn070208(@str varchar(10))
    returns varchar(100)
    as
    begin
    return '000'+replace(@str,'-','00')
    end
    GOprint dbo.fn070208('3-10-1')
    drop function fn070208
    结果
    00030010001
      

  2.   

    create table t(c varchar(20))
    insert into t select '1'    
    union all select     '2'     
    union all select     '2-2'    
    union all select     '2-2-1'  
    union all select     '3'      
    union all select     '3-1'    
    union all select     '3-10'   
    union all select     '3-10-1' 
    union all select     '10'     
    union all select     '10-1'select REPLACE('-'+c,'-','000')c from t
    -------------------------
    c
    0001
    0002
    00020002
    000200020001
    0003
    00030001
    000300010
    0003000100001
    00010
    000100001
      

  3.   

    如果,以四位为标准,解决了:)create function fun_name(@AllChar varchar(100))
    returns varchar(100)
    as
    begin
    declare @FirstChar varchar(50)
    declare @FirstPoint int
    declare @lenth int 
    declare @returnChar varchar(100)
    set @lenth=len(@AllChar)
    set @FirstPoint=charindex('-',@AllChar)
    set @returnChar=''
    set @allChar=@allChar+'-'while( @FirstPoint>0)
    begin
    set @FirstChar=substring(@AllChar,0,@FirstPoint)
    set @returnChar=@returnChar+case when len(@FirstChar)=1 then '000'+@FirstChar when len(@FirstChar)=2 then '00'+@FirstChar when len(@FirstChar)=3 then '0'+@FirstChar else  @FirstChar end
    set @AllChar=substring(@AllChar,@FirstPoint+1,@lenth)
    set @FirstPoint=charindex('-',@AllChar)
    end
    return @returnChar
    endselect dbo.fun_name('3-10-1')
    ----------
    0003 0010 0001
      

  4.   


    select dbo.fun_name('0030-100-010')---------------
    0030 0100 0010
      

  5.   

    谢谢各位关注!位数最好可以自己来定to  :w75251455(砍破)
    10-11-10  格式后是什么样  格式化后应该是 001000110010
      

  6.   

    暂时不结贴,希望有更多的方法实现!谢谢大家TO :dawugui(潇洒老乌龟) 
    3-1    格式化成 00030001
         3-10-1 格式化成 00030010001
         10-1   格式化成 0010001
    其中:  3-10-1 格式化成 00030010001 是写错了,应该是 000300100001
            10-1   格式化成 0010001      应该是00100001看的真仔细:)
      

  7.   

    TO :tntzbzc(华裔大魔王—抗日要从娃娃抓起) 你这个函数function fn070208(@str varchar(10))  有点问题,比如如果是3-110-1 就应该是000301100001
      

  8.   

    to w75251455(砍破) ( )
    你这个也有点问题,比如  3-110-1 就应该是000301100001
      

  9.   

    to: rookie_one(流氓会武术,谁都挡不住) 是对的!
      

  10.   

    CREATE FUNCTION fn_Format(@S nvarchar(100),@Len int)
    RETURNS nvarchar(100)
    AS
    BEGIN
    DECLARE @Temp nvarchar(50)
    SET @S=RIGHT(POWER(10,@Len),@Len)+@S
    SET @Temp=RIGHT(POWER(10,@Len-1),@Len-1)
    RETURN REPLACE(@S,'-',@Temp)
    END
    GO
    SELECT dbo.fn_Format('2',3)
    SELECT dbo.fn_Format('3-10',3)
    SELECT dbo.fn_Format('3-10-1',3)
    DROP FUNCTION fn_Format
      

  11.   

    PRINT dbo.fn_Format('2',3)
    PRINT dbo.fn_Format('3-10',3)
    PRINT dbo.fn_Format('3-10-1',3)
    结果:
    ---------------
    0002
    00030010
    00030010001