CREATE FUNCTION F_BBDataD (@temp_BTime varchar(20))
returns varchar(100)  
--返回类型必须为varchar型
BEGIN
DECLARE @tmp_A1 float,@tmp_A2 float,@tmp_A3 float,@tmp_bb varchar(200)
SELECT @tmp_A1=SUM(CONVERT(decimal(20,3), Gyld_A1)),@tmp_A2=SUM(CONVERT(decimal(20,3), Gyld_A2)),@tmp_A3=SUM(CONVERT(decimal(20,3),Gyld_A24))  FROM T_Gyld SET @tmp_bb=CONVERT(varchar,@tmp_A1)+','+CONVERT(varchar,@tmp_A2)+','+CONVERT(varchar,@tmp_A3)+',' RETURN (@tmp_bb)END

解决方案 »

  1.   

    把所有float用numeric(18,3)代替救OK了
      

  2.   

    既然你的数据都是三位小数,当然用decimal/numeric合适
    float是近拟数,转换的时候,可能会丢失小数,而且默认情况下,小数位是自动控制的
    下表显示了从 float 或 real 转换为字符数据时的 style 值。值 输出 
    0(默认值) 最大为 6 位数。根据需要使用科学记数法。 
    1 始终为 8 位值。始终使用科学记数法。 
    2 始终为 16 位值。始终使用科学记数法。 
      

  3.   

    --变量类型还没有改过来,一并改过CREATE FUNCTION F_BBDataD (@temp_BTime varchar(20))
    returns varchar(100)  
    --返回类型必须为varchar型
    BEGIN
    DECLARE @tmp_A1 decimal(20,3),@tmp_A2 decimal(20,3),@tmp_A3 decimal(20,3),@tmp_bb varchar(200)
    SELECT @tmp_A1=SUM(CONVERT(decimal(20,3), Gyld_A1)),@tmp_A2=SUM(CONVERT(decimal(20,3), Gyld_A2)),@tmp_A3=SUM(CONVERT(decimal(20,3),Gyld_A24))  FROM T_Gyld SET @tmp_bb=CONVERT(varchar,@tmp_A1)+','+CONVERT(varchar,@tmp_A2)+','+CONVERT(varchar,@tmp_A3)+',' RETURN (@tmp_bb)END
      

  4.   

    float转换为字符时数字长度最大为6位。
    例 :
    SELECT cast(CONVERT(float,'125.5') as varchar(10))
    SELECT cast(CONVERT(float,'125.5112') as varchar(10))
    SELECT cast(CONVERT(float,'1.255112') as varchar(10))
    ---结果:
    ---------- 
    125.5(所影响的行数为 1 行)           
    ---------- 
    125.511(所影响的行数为 1 行)           
    ---------- 
    1.25511(所影响的行数为 1 行)