划分两个字段时获取完整的数字

时间:2015-04-21 15:00:09

标签: sql-server sql-server-2008 rounding operation

我试图围绕一些领域。当我有59天的时候,我想把它改成60天。

问题在于,当我使用此代码时,59将更改为30,因为它是1的圆形。

 select round(1.9666,0)*30, round(59/30,0)*3'

该查询的结果是第一个字段为60,第二个字段为30。问题在于,当我尝试过时:

 select 59/30

结果为1,我需要的答案是1.9666 ......

我该怎么做?

2 个答案:

答案 0 :(得分:1)

因为您要除以的数字是INT(左侧的数据类型无关紧要),SQL Server将返回INT作为答案。

如果您想要一个带小数位的数字作为结果,则需要除以一。

不要转换为FLOAT,因为答案可能不是您想要的(浮动通常不准确并且是'approximations'):

SELECT 59 / CAST(30 AS FLOAT) -- = 1.96666666666667

CAST分组的右侧是DECIMAL

SELECT 59 / CAST(30 AS DECIMAL(10, 2)) -- = 1.96666

答案 1 :(得分:0)

SELECT cast(59 AS FLOAT) / cast(30 AS FLOAT)

因为原始数字是整数,所以SQL假定你想要一个整数输出。

为确保您获得小数位数,您需要先将数据类型从整数int更改为浮点float

这是CAST命令的作用。

编辑:评论者建议你转而使用DECIMAL。原理是一样的,但你需要提供更多的论据。要转换为小数,请使用以下内容:

cast(59 as DECIMAL(18, 3))

第一个参数(18)是您想要允许的小数总数。第二个参数(3)是小数点后的数字。

它更准确的建议是正确的 - 因为您将看到您是否一个接一个地运行此答案中的SELECT语句。但在这种特殊情况下,它只会产生微小的差异。