alter function dbo.fw (@n int) 
returns varchar(10)
as 
begin
declare @st1 varchar(10),@st2 varchar(10)
declare @v int
set @st1 = cast(@n as char(10))
set @st2 = ''
set @v = 4 - Len(@st1)
while @v>0
begin
   set @st2 = @st2 + '0'
   set @v = @v - 1
end
set @st2 = @st2 + @st1
return (@st2)
end

解决方案 »

  1.   

    -- 要理解varchar和char类型的差异。
      

  2.   

    --搞这么复杂干什么?这样不就OK了吗?select right(cast(10000+200 as varchar),4)
      

  3.   

    --一句即可
    create function dbo.fw (@n int) 
     returns varchar(10)
    as 
    begin
      Return(replicate('0',4-len(cast(@n as varchar)))+cast(@n as varchar))
    end
      

  4.   

    --这句就可一了
    declare @n int
    set @n=20
    select left('0000',4-len(@n))+cast(@n as varchar)
      

  5.   

    请问 -- 要理解varchar和char类型的差异。如何理解,能说说吗?
      

  6.   

    楼上 你执行下面的两段代码就清楚了
    ------
    declare @a char(4),@b char(4)
    set @a = 'abc'
    set @b = '123'
    set @a = @a + @b
    print len(@a)declare @a varchar(4),@b varchar(4)
    set @a = 'abc'
    set @b = '123'
    set @a = @a + @b
    print len(@a)