我在一存储过程中返回的一个结果集,因为单位为万元,所以需要保留四个数字,但小数点后面只要所有非零数字,像这样的12.3000,14.0000,323.3440的数字,在返回时我只要12.3、14、323.344这样格式如何办呀?
(在表中字段为decmail,保留四个小数)

解决方案 »

  1.   

    select replace(cast(12.3000 as varchar(10)),'0','')
      

  2.   

    hlq8210(影子) 你的方法对于12.305就不对了要想没有0你的字段设为varchar就可以了吧,计算的时候再转换。
      

  3.   

    select replace(cast(12.3000 as varchar(10)),'0','')
    这样不行吧?要是这样怎么办?1002.3000,这样也是12.3,而不是1002.3了。
      

  4.   

    如果在后台存储过程无法解决,在asp.net中是否有这样的函数或者其他处理方法?注:返回结果最终绑定在DataGrid中。
      

  5.   

    hsj20041004(光芒) 说的对
    如果不按照他的方法的话就要写函数了
      

  6.   

    在数据库里面应该有将文本转换为数字的函数,可在SQL里面转出来.
    比如ORACLE
    select to_number('12.3000') from table
    如此,无效的0将会自动被去除.
      

  7.   

    帮你写了个函数
    希望对你有所帮助
    if EXISTS (SELECT * 
       FROM   sysobjects 
       WHERE  name =N'TestFun')
    DROP FUNCTION TestFun
    GOcreate function dbo.TestFun(@p decimal(18,4) )
    returns Varchar(100)
    AS
    begin  declare @str1 varchar(100)
    declare @str2 varchar(100)
    select @str1=cast(@p as varchar(100))
    select @str1 =left(@p,charindex( '.',@p)-1)
    select @str2=right(@p,len(@p)-charindex('.',@P)+1)

    while charindex('0',right(@str2,1))>0 
    begin 
          select @str2=left(@str2,len(@str2)-1)
              end              
    if len(@str2)=1 
            begin
             select  @str2=''
            end 
    return (@str1+@str2)
    end 
    GO------test
    select dbo.TestFun(1034545.1240)
    select dbo.TestFun(1034545.1200)
    select dbo.TestFun(1034545.1000)
    select dbo.TestFun(1034545.0100)
    select dbo.testfun(1034545.0000)
    -------------结果
    1034545.124
    1034545.12
    1034545.1
    1034545.01
    1034545
      

  8.   

    帮你写了个函数希望对你有所帮助
    if EXISTS (SELECT * FROM   sysobjects WHERE  name =N'TestFun')DROP FUNCTION TestFun
    GO
    create function dbo.TestFun(@p decimal(18,4) )
    returns Varchar(100)
    AS
    begin  declare @str1 varchar(100)
    declare @str2 varchar(100)
    select @str1=cast(@p as varchar(100))
    select @str1 =left(@p,charindex( '.',@p)-1)
    select @str2=right(@p,len(@p)-charindex('.',@P)+1)

    while charindex('0',right(@str2,1))>0 
    begin 
          select @str2=left(@str2,len(@str2)-1)
              end              
    if len(@str2)=1 
            begin
             select  @str2=''
            end 
    return (@str1+@str2)
    end 
    GO------test
    select dbo.TestFun(1034545.1240)
    select dbo.TestFun(1034545.1200)
    select dbo.TestFun(1034545.1000)
    select dbo.TestFun(1034545.0100)
    select dbo.testfun(1034545.0000)-------------结果
    1034545.124
    1034545.12
    1034545.1
    1034545.01
    1034545
      

  9.   


    昨天以为没人回帖,所以自己写了一个函数:create function del_zreo(@pass_value decimal(18,4))
      returns varchar(64)
    as 
      begin
        declare @s_tmp varchar(64), @len int
        set @s_tmp = convert(varchar(64),@pass_value)
        while((right(@s_tmp,1)='0' or right(@s_tmp,1)='.')and charindex('.',@s_tmp)>0)
           begin
             set @len = len(@s_tmp)
    set @s_tmp= left(@s_tmp,@len-1)
          end
        return @s_tmp
      end
    不知自己写的这个函数是否有bug,正在使用测试中。
    本想多给你些分了,鉴于你口气不是很友好,所以只给你20分了,呵呵。