Sql server sql server divident未获得正确的结果
我正在使用windows应用程序,我在vb.net中有一段代码,如下所示:Sql server sql server divident未获得正确的结果,sql-server,vb.net,stored-procedures,Sql Server,Vb.net,Stored Procedures,我正在使用windows应用程序,我在vb.net中有一段代码,如下所示: PT1 = PT - LT If PT1 > modvAL Then q1 = PT1 / modvAL Else q1 = 1 End If 这里我的PT1值是2752,ModvAL是1440,然后我得到的q1值是2(这是我的vb.net代码) 这是我的存储过程部分,我在sql server中做同样的事情,但我的q1没有得到正确的值?我的存储过程有什么问题?警告:这是一个猜测,因为您的问题缺少基本信息(
PT1 = PT - LT
If PT1 > modvAL Then
q1 = PT1 / modvAL
Else
q1 = 1
End If
这里我的PT1值是2752,ModvAL是1440,然后我得到的q1值是2(这是我的vb.net代码)
这是我的存储过程部分,我在sql server中做同样的事情,但我的q1没有得到正确的值?我的存储过程有什么问题?警告:这是一个猜测,因为您的问题缺少基本信息(示例数据、涉及字段的数据类型、预期结果) 我假设您在sql端根据近似数据类型字段执行计算,因此结果不是实际结果,而是数据类型支持的最接近的值 如果您愿意分享适当的信息,就有可能了解这是否是问题所在并找到解决方案
您可以在sql server中找到一些关于近似数据类型的信息;还要查看更多详细信息。当您使用
INT
datatype时,结果将全部四舍五入。举以下例子:
DECLARE @floatValue FLOAT = 100
DECLARE @intValue INT = 100
DECLARE @divisor INT = 90
SELECT @intValue / @divisor -- this will return 1
SELECT @floatValue / @divisor -- this will return 1.11
因此,为了修复查询,您可以将变量的数据类型改为浮动(或另一种非整数数字类型)。您缺少if块的“end”
set @PT1=@PT-@LT
if @PT1>@modvAL
begin
set @q1=@PT1 / 1440
end //missing
else
begin
set @q1=1
end
对于单语句,您也可以使用if-else而不使用块
set @PT1=@PT-@LT
if (@PT1>@modvAL)
set @q1=@PT1 / 1440
else
set @q1=1
预期值应该是多少?我必须得到q1在存储过程中也是2。代码我得到的是正确的。但是在sql中,我得到1为什么存储过程的神奇值是1440而不是使用
@modVal
?sql中变量的数据类型是什么?如果它们都是INT
你会得到很多舍入。我的@q1变量是整数在我得到1.95之前,我想把它转换成2i想舍入到正数,然后像这样舍入最终值(@result,0)
set @PT1=@PT-@LT
if (@PT1>@modvAL)
set @q1=@PT1 / 1440
else
set @q1=1