SQL SERVER向上舍入到最接近的十分之一和整数

时间:2015-01-22 20:18:20

标签: sql sql-server

我需要将计算从VBS转换为Sql server到整数和最接近的十分之一。这是VB上的计算:

 a=2/28/2016
    b=6/15/2016
    d=1
    Days360(a, b) = 107
    -INT(-(10^d)*DAYS360(a,b)/30)/(10^d) =
    -INT(-(10^1)*107/30)/(10^1) =
    -INT(-10*107/30)/10 =
    -INT(-1070/30)/10 =
    -INT(-35.666667)/10 =
    -(-36)/10 =
    36/10 = 3.6 --- result for nearest tenth

a=2/28/2016
b=6/15/2016
d=0
Days360(a, b) = 107
-INT(-(10^d)*DAYS360(a,b)/30)/(10^d) =
-INT(-(10^0)*107/30)/(10^0) =
-INT(-1*107/30)/1 =
-INT(-107/30)/1 =
-INT(-3.5666667)/1 =
-(-4)/1 =
4/1 =4  ---result for the whole number

如何将这两个转换为sql?我使用这两个查询,但我没有得到预期的结果:

SELECT ROUND(DATEDIFF(day,'2016-02-28','2016-06-15')*10/30/10,0) AS DiffDate
SELECT ROUND(DATEDIFF(day,'2016-02-28','2016-06-15')*10/30/10,1) AS DiffDate

1 个答案:

答案 0 :(得分:1)

在处理文字时,某些版本的SQL Server具有以下行为:

任何没有小数点的非封闭数字都是integer constant。当划分两个整数时,结果默认为整数,因此表达式可能会使用通常的优先级规则评估为107 * 10 / 30 / 10 => 1070 / 30 / 10 => 35 / 10 => 3。尝试使用浮点常量并观察结果。 (例如,写10.0而不是10

有关常量的更多信息,请参见此页面:https://msdn.microsoft.com/en-us/library/ms179899.aspx。或者看到这个问题:How to get a float result by dividing two integer values?