一个参数是要处理的数据,另外一个参数是有效位数的长度,返回处理好后的数据;比如:  0.123 保留两个有效位数是0.12
       0.125 保留两个有效位数是0.13
       123 保留两个有效位数是120
       125 保留两个有效位数是130
谢谢大家了

解决方案 »

  1.   

    SQLserver没有重载,除非返回字串,无法返回相应的数据类型.DECLARE @n DECIMAL(20,7),@num DECIMAL(20,7),@i INT,@s VARCHAR(100)
    --SELECT @num=-123.11 
    SELECT @num=123
    --SELECT @num=0.14786
    SELECT @i=2
    SELECT @n=ABS(@num)IF @n<1 --当@n为小数
    SET @s=LEFT(@n,@i+2)
    ELSE 
    BEGIN

    IF @i>=LEN(CAST(@n AS INT)) AND @i<=LEN(@n)
    SET @s=LEFT(@n,@i+1)
    ELSE IF @i>LEN(@n)
    SET @s=CONVERT(VARCHAR(100),@n) + REPLICATE('0',@i-LEN(@n))
    ELSE
    SET @s=LEFT(@n,@i) + REPLICATE('0',LEN(CAST(@n AS INT))-@i) END
    SELECT @s=(CASE WHEN @num>0 THEN '' ELSE  '-' END) + @sPRINT @s
    自己去改成函数语法.
      

  2.   

    CREATE FUNCTION CutNum
    (@num DECIMAL(20,7),@i INT)
    RETURNS VARCHAR(100)
    AS
    BEGIN
    DECLARE @n DECIMAL(20,7),@s VARCHAR(100)
    SELECT @n=ABS(@num)IF @n<1 --当@n为小数
    SET @s=LEFT(@n,@i+2)
    ELSE 
    BEGIN

    IF @i>=LEN(CAST(@n AS INT)) AND @i<=LEN(@n)
    SET @s=LEFT(@n,@i+1)
    ELSE IF @i>LEN(@n)
    SET @s=CONVERT(VARCHAR(100),@n) + REPLICATE('0',@i-LEN(@n))
    ELSE
    SET @s=LEFT(@n,@i) + REPLICATE('0',LEN(CAST(@n AS INT))-@i) END
    SELECT @s=(CASE WHEN @num>0 THEN '' ELSE  '-' END) + @sRETURN @s
    END----------------------------
    SELECT dbo.CutNUM(123.11,2)
    /*
    120
    */
    SELECT dbo.CutNum(-127.45,7)
    /*
    -127.4500
    */