可以用ROUND函数
-------------------------ROUND
返回数字表达式并四舍五入为指定的长度或精度。语法
ROUND ( numeric_expression , length [ , function ] ) 
注释
ROUND 始终返回一个值。如果 length 是负数且大于小数点前的数字个数,ROUND 将返回 0。示例 结果 
ROUND(748.58, -4)-- 0 
当 length 是负数时,无论什么数据类型,ROUND 都将返回一个四舍五入的 numeric_expression。示例 结果 
ROUND(748.58, -1) --750.00 
ROUND(748.58, -2) --700.00 
ROUND(748.58, -3) --1000.00 
示例
A. 使用 ROUND 和估计值
下例显示两个表达式,说明使用 ROUND 函数且最后一个数字始终是估计值。SELECT ROUND(123.9994, 3), ROUND(123.9995, 3) 
GO下面是结果集:----------- -----------
123.9990    124.0000    B. 使用 ROUND 和四舍五入的近似值
下例显示四舍五入和近似值。语句 结果 
SELECT ROUND(123.4545, 2)
 123.4500
 
SELECT ROUND(123.45, -2)
 100.00
 
C. 使用 ROUND 截断
下例使用两个 SELECT 语句说明四舍五入和截断之间的区别。第一个语句四舍五入结果。第二个语句截断结果。语句 结果 
SELECT ROUND(150.75, 0)
 151.00
 
SELECT ROUND(150.75, 0, 1)
 150.00
 

解决方案 »

  1.   

    没有roundup和rounddown函数,好象access有吧
      

  2.   

    但我想要下面的结果,SQL不是可以调用EXCEL的函数吗?我也看过有关资料,但不知道怎么调用。
    A                           B 
    公式                      说明(结果) 
    =ROUNDUP(3.2,0)        将 3.2 向上舍入,小数位为 0 (4) 
    =ROUNDUP(76.9,0)       将 76.9 向上舍入,小数位为 0 (77) 
    =ROUNDUP(3.14159, 3)   将 3.14159 向上舍入,保留三位小数 (3.142) 
    =ROUNDUP(-3.14159, 1)  将 -3.14159 向上舍入,保留一位小数 (-3.2) 
     A 
    数据 
    20.3 
    -5.9 
    12.5493 
    公式 说明(结果) 
    =ROUNDDOWN(A2,0) 将 20.3 向下舍入到最接近的整数 (20) 
    =ROUNDDOWN(A3,0) 将 -5.9 向下舍入 (-5) 
    =ROUNDDOWN(A4,2) 将数字向下舍入到最接近的百分位,两位小数 (12.54) 
     
      

  3.   

    可以用ceiling() 和floor()如
    select ceiling(10.2)
    select floor(10.6)
    结果:11,10
      

  4.   

    但如果说要象LZ所说DECIMAL 类型精确到一定位数,向上和向下 近似,可以象:
    declare @v1 decimal(10,4)
    select @v1=123.1235
    select ceiling(@v1*1000)/1000
    select floor(@v1*1000)/1000
    结果:
    123.2400
    123.2300
      

  5.   

    直接控制excel比较麻烦,倒可以写个控制excel的dll,再用sql来调用
      

  6.   

    以roundup为例:
    比如用vb写的dll,其工程名是ClassFun,类名为Fun:Dim excelT As New Excel.Application
    Public Function RoundUp(para As String, pos As String) As Double
    Dim returnT As DoubleexcelT.Workbooks.Add
    excelT.Visible = False
    excelT.ActiveCell.FormulaR1C1 = "=roundup(" & para & "," & pos & ")"
    returnT = excelT.ActiveCell.ValueStdev = returnT
    Set excelT = Nothing
    End Function这个dll在sql中就可以用存储过程来调用
    如:
    declare @o int
    declare @s int
    declare @out real
    declare @para varchar(100),@pos varchar(2)
    exec @s=sp_oacreate 'ClassFun.Fun',@o output
    if @s<>0
        print 'error create object'set @para='23.34234'--被格式参数
    set @pos='3'--格式为3位
    exec @s=sp_oamethod @o,'RoundUp',@out output, @para,@posselect @out
                  
    ------------------------ 
    23.343(所影响的行数为 1 行)