我需要将计算从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
答案 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?